permissions: drop the capability and tool-group wording left after the rework
This commit is contained in:
parent
f0844f6da3
commit
a937a8ba9a
5 changed files with 9 additions and 9 deletions
|
|
@ -39,7 +39,7 @@ declarations.
|
||||||
|
|
||||||
## Trust boundary & security
|
## Trust boundary & security
|
||||||
|
|
||||||
- **What's the operator/agent trust boundary? What's a capability?** →
|
- **What's the operator/agent trust boundary? What's a permission?** →
|
||||||
[`trust-boundary/boundary.md`](trust-boundary/boundary.md).
|
[`trust-boundary/boundary.md`](trust-boundary/boundary.md).
|
||||||
- **Agent trust model, prompt-injection threat model, credential
|
- **Agent trust model, prompt-injection threat model, credential
|
||||||
isolation?** → [`trust-boundary/security.md`](trust-boundary/security.md).
|
isolation?** → [`trust-boundary/security.md`](trust-boundary/security.md).
|
||||||
|
|
|
||||||
|
|
@ -36,13 +36,13 @@ One entry per agent _this hive_ has state/config for, in name order.
|
||||||
Unlike the swarm roster, it's a derived cache: the reconcile pass below
|
Unlike the swarm roster, it's a derived cache: the reconcile pass below
|
||||||
rebuilds it from what the hive observes locally (config repos cloned, containers spawned), and it
|
rebuilds it from what the hive observes locally (config repos cloned, containers spawned), and it
|
||||||
answers a narrower question than "does this agent exist": _which of
|
answers a narrower question than "does this agent exist": _which of
|
||||||
this hive's local agents the `ManageRootAgent` capability's bind-mounts
|
this hive's local agents the `ManageRootAgent` permission's bind-mounts
|
||||||
should cover._ `topology::all_agents` is the only reader that matters.
|
should cover._ `topology::all_agents` is the only reader that matters.
|
||||||
|
|
||||||
That reader is a permission boundary: the set it returns is what an agent
|
That reader is a permission boundary: the set it returns is what an agent
|
||||||
holding the `ManageRootAgent` capability gets bind-mounted (each other
|
holding the `ManageRootAgent` permission gets bind-mounted (each other
|
||||||
agent's `state` read-write and `config` read-only; never `harness`). An
|
agent's `state` read-write and `config` read-only; never `harness`). An
|
||||||
agent holding no capability sees its own dirs and nothing else:
|
agent holding no permission sees its own dirs and nothing else:
|
||||||
`ManageRootAgent` is the only grant that reaches another agent's state
|
`ManageRootAgent` is the only grant that reaches another agent's state
|
||||||
dir. See
|
dir. See
|
||||||
[`persistence.md`](persistence.md)'s _Cross-agent access to state._
|
[`persistence.md`](persistence.md)'s _Cross-agent access to state._
|
||||||
|
|
@ -51,7 +51,7 @@ dir. See
|
||||||
|
|
||||||
`topology.json` may also be a map of `name → parent | null`; the reader
|
`topology.json` may also be a map of `name → parent | null`; the reader
|
||||||
accepts that shape and takes its keys as the roster. An empty
|
accepts that shape and takes its keys as the roster. An empty
|
||||||
roster costs more than a cosmetic gap: every capability holder loses its
|
roster costs more than a cosmetic gap: every permission holder loses its
|
||||||
mounts until the next reconcile pass writes the array form.
|
mounts until the next reconcile pass writes the array form.
|
||||||
|
|
||||||
### Why meta, not per-agent `agent.nix`
|
### Why meta, not per-agent `agent.nix`
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ to track it:
|
||||||
- **`stores/`** — sqlite-backed stores (broker, queues, audit, power).
|
- **`stores/`** — sqlite-backed stores (broker, queues, audit, power).
|
||||||
- **`workers/`** — background sweeps (crash watch,
|
- **`workers/`** — background sweeps (crash watch,
|
||||||
autoupdate, knowledge sync).
|
autoupdate, knowledge sync).
|
||||||
- **`agent_config/`** — per-agent registries (tool groups,
|
- **`agent_config/`** — per-agent registries (permissions,
|
||||||
capabilities, resource limits, topology).
|
resource limits, topology).
|
||||||
- **`stats/`** — dashboard metrics aggregation + OTEL export.
|
- **`stats/`** — dashboard metrics aggregation + OTEL export.
|
||||||
- **`socket_server/`** — the unix-socket request server shared by
|
- **`socket_server/`** — the unix-socket request server shared by
|
||||||
per-agent + manager sockets.
|
per-agent + manager sockets.
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ fn read_from(path: &Path) -> std::io::Result<BTreeSet<String>> {
|
||||||
|
|
||||||
/// Every agent the roster knows about, in name order. This is the set
|
/// Every agent the roster knows about, in name order. This is the set
|
||||||
/// a [`hive_sh4re::permissions::Permission::ManageRootAgent`] holder gets
|
/// a [`hive_sh4re::permissions::Permission::ManageRootAgent`] holder gets
|
||||||
/// bind-mounted, and it is deliberately unfiltered: that capability means
|
/// bind-mounted, and it is deliberately unfiltered: that permission means
|
||||||
/// "may manage any agent", so the set is all of them.
|
/// "may manage any agent", so the set is all of them.
|
||||||
///
|
///
|
||||||
/// An unreadable roster is logged and yields no agents, so the holder
|
/// An unreadable roster is logged and yields no agents, so the holder
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ let
|
||||||
# Tools opencode must not offer, mirroring claude's built-in allow-list
|
# Tools opencode must not offer, mirroring claude's built-in allow-list
|
||||||
# (hive_sh4re::permissions): no built-in shell (shell is `mcp__bash__run`),
|
# (hive_sh4re::permissions): no built-in shell (shell is `mcp__bash__run`),
|
||||||
# no nested agents, no in-session todo list, no web search. `webfetch`
|
# no nested agents, no in-session todo list, no web search. `webfetch`
|
||||||
# asks, and the harness answers per the `web_tools` tool group. Passed as
|
# asks, and the harness answers per the `web_tools` permission. Passed as
|
||||||
# OPENCODE_PERMISSION because opencode merges that over every config file,
|
# OPENCODE_PERMISSION because opencode merges that over every config file,
|
||||||
# including ones the agent can write.
|
# including ones the agent can write.
|
||||||
opencodePermission = {
|
opencodePermission = {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue