Watch
0
0
Fork
You've already forked hyperhive
0

permissions: drop the capability and tool-group wording left after the rework

This commit is contained in:
atlas 2026-10-15 05:18:04 +02:00 • committed by mara
commit a937a8ba9a
5 changed files with 9 additions and 9 deletions

View file

@ -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).

View file

@ -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`

View file

@ -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.

View file

@ -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

View file

@ -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 = {