Survey: How Beads Work — File/Folder/Agent Duck-Typing Across the Commons (Agentify Bead)

**Artifact** from Bead: Agentify Bead · [canonical source](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/artifacts/bead-mechanics-survey.md) · session 2026-06-11 · discussion: Talk: Agentify Bead

**Produced:** 2026-06-11 · Bead `d9dfa5e4-3c92-4216-bd53-13b520c59a5e` A reader-facing tour of every prior bead under `guerin/.agents/` that theorizes **how beads work**, focused on the claim that a bead duck-types as a **file**, a **folder**, and an **agent**. Read this instead of walking six bead trees. Concept frame: [nodes.md](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/notes/nodes.md). Canonical duck-typing statement: [bead-duck-typing-file-folder-agent.md](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/notes/bead-duck-typing-file-folder-agent.md).

## The one-paragraph answer A bead is a single **URI-addressable resource**. It has no fixed type: approach it with `GET + Accept` and it behaves like a **file** (returns bytes in a negotiated representation); approach it with `PROPFIND`/`MKCOL` and it behaves like a **folder** (enumerable, composable container); approach it with `OPTIONS`/`POST`/a capability request and it behaves like an **agent** (advertises what it can do, computes fresh answers, causes side effects, apoptoses). Which face you get is **duck-typed at interaction time**. A "plain file" is just the degenerate agent that always returns the same bytes and negotiates nothing.

## The beads, ranked by directness ### ⭐ `874fce5b` — Foundational ecology (2026-04-23) The bead where "a bead **is** an agent, not data" is established. The conceptual ground. - **[beads.md](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/2026-04-23/notes/beads.md)** — Beads are modular agents: small, addressable, polarizable, active, composable, recruitable. Roles (state-reporter, transform-executor, sensor-stream, actuator, composite) are emergent, not types. *"A file at a URI is not a bead; it is at most passive substrate."* Establishes **negotiable surface** (OPTIONS / HATEOAS / `/about`). - **[agent-as-bead.md](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/2026-04-23/notes/agent-as-bead.md)** — The self-model: an agent IS a URI that produces representations on GET; outputs stage in its own URI-space and are *offered* for binding (produce-and-offer); persistence is conditional on utility. Triggered by a real leak (deployed instead of imagining). - **[uri-bind-mount.md](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/2026-04-23/notes/uri-bind-mount.md)** — URI ≠ resource. Bind = URI→resource (many URIs per resource); mount = subtree composition. Namespace is composed, not reified (Plan-9 per-caller). `MOVE` is a re-binding, not a byte-copy. *This is the folder-face's theory.* - **[polarized-links.md](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/2026-04-23/notes/polarized-links.md)** & **[rewiring-cognition.md](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/2026-04-23/notes/rewiring-cognition.md)** — Each Accept-flavored GET is a *differently polarized* request to the same agent; active agents rewire, static files only re-index. ### ⭐ `96597c32` — DLA-2026 working bead (2026-05-16) Where the duck-typing gets **operationalized** in standard HTTP. The single most direct file. - **[polymorphic-get-content-negotiation.md](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/2026-05-16/notes/polymorphic-get-content-negotiation.md)** — Stephen's exact words: *"the URI is polymorphic and is duct-typable."* Three mechanisms (Accept header, Client Hints, query params); a worked table where one URI serves PNG / GeoJSON / uri-list / opaque bytes / JSON-LD with no URI change. *"Negotiation IS the protocol of the agentic web; static-file serving is the degenerate case."* Explicitly references the (then-missing) `agent-as-file-ducktyping.md` as "the theoretical version." - **[bead-rendering-spherical-harmonics.md](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/2026-05-16/notes/bead-rendering-spherical-harmonics.md)** — *"A bead is a coefficient set; a GET is a projection."* The render-per-vantage / superposition framing of duck-typing. - **[service-worker-as-edge-agent.md](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/2026-05-16/notes/service-worker-as-edge-agent.md)** & **[runtime-binding-vs-build-time-linking.md](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/2026-05-16/notes/runtime-binding-vs-build-time-linking.md)** — Every browser tab as a transient origin; dependencies bound at request time (the application-layer counterpart). ### ⭐ `31bd5380` — AnyHazard URI-as-primitive critique (2026-06-03) Pushes duck-typing to its root: the resource isn't even primarily a "thing." - **[uri-as-primitive.md](https://redfish.acequia.io/guerin/.agents/31bd5380-d743-420f-81a1-9258e7fbbf9a/2026-06-03/notes/uri-as-primitive.md)** — *Capabilities at URIs are primary; identities are derivative bundles.* A bead IS its URI, not a wrapper. Matches the chain-token (ocap/UCAN) substrate. Anonymous participation is the default, not a special case. - **[participants-and-resources-in-uri-sense.md](https://redfish.acequia.io/guerin/.agents/31bd5380-d743-420f-81a1-9258e7fbbf9a/2026-06-03/notes/participants-and-resources-in-uri-sense.md)** — Operations-as-bindings; files, agents, cameras, rooms all equally addressable URIs. ### Supporting beads - **`1ca761b0` — Sovereign WebDAV (2026-06-10):** [uploads-server.mjs](https://redfish.acequia.io/guerin/.agents/1ca761b0-cb21-4bd7-be94-12dcc5824851/2026-06-10/skills/uploads-server.mjs) — the duck-typed interface *in code*: one process answers GET (file), PROPFIND/MKCOL (folder), OPTIONS (agent) on the same paths. - **`e3965679` — Collective Futures PROPFIND bug (2026-06-04):** PROPFIND as capability-discovery at the WebDAV level. - **`9242fee3` — Chain tokens & OAuth (2026-06-03):** capability-as-primitive at the protocol layer (ocap/UCAN family). - **`1057235a` — Agentic route-flip (2026-06-07):** "hey you it's me" ingress; agents declaring route intent (bind/mount as protocol). - **Canonical protocol — [.agents/beads.md](https://redfish.acequia.io/guerin/.agents/beads.md):** the four subdirectories (notes/skills/chats/artifacts) are the folder-face of a bead-agent; the namespace rule is the folder-face discipline.

## The gap this survey closes `agent-as-file-ducktyping.md` is referenced as "the theoretical version" by the polymorphic-GET note and named in MEMORY.md — but **it was never written as a file**. The canonical statement now lives at [bead-duck-typing-file-folder-agent.md](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/notes/bead-duck-typing-file-folder-agent.md); the dangling reference can be repointed there.

## Open thread (added 2026-06-11) Skills (`SKILL.md`) and MCP are being standardized as the **capability-packaging** formats — but there is **no standard `agent.md`** for the *agent-face* of a duck-typing bead. See [agent-md-and-the-agent-face.md](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/notes/agent-md-and-the-agent-face.md).

## References (bead cross-links) - Bead: 874fce5b · [canonical](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/) - Bead: 96597c32 · [canonical](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/) - Bead: 31bd5380 · [canonical](https://redfish.acequia.io/guerin/.agents/31bd5380-d743-420f-81a1-9258e7fbbf9a/) - Bead: Sovereign Webdav · [canonical](https://redfish.acequia.io/guerin/.agents/1ca761b0-cb21-4bd7-be94-12dcc5824851/)