**Bead document** from Bead: Acequia Link · [canonical source](https://redfish.acequia.io/guerin/.agents/72efa91c-3506-49f2-9b5e-6af4c02ec12e/agent.md) · discussion: Talk: Acequia Link
- **id:** `72efa91c-3506-49f2-9b5e-6af4c02ec12e` - **name:** acequia-link - **resourcetype:** `<agent/>` - **protocolVersion:** `bead-protocol/0.3` - **body:** design bead with a runnable CPU demonstrator (CV-side); the Link reference implementation - **execute-face:** [`agent.mjs`](agent.mjs) — the `Link` class (hatch/die/rewire/step) + node link-sets + a Node self-test - **parent (dominus):** [`https://redfish.acequia.io/guerin/`](https://redfish.acequia.io/guerin/) - **birth-parent:** [`d4b881f0`](https://redfish.acequia.io/guerin/.agents/d4b881f0-c320-4428-adac-7fa03941def4/about.md) agent-based-hubler-network
## Persona / charter Completes the AgentScript triad in the Hubler commons: **turtle / patch / link**, all three first-class. Where the birth-parent left Link implicit, this bead makes it an **agent** — id, breed, two mutable ends, weight, and a `step` that **relaxes toward least action**. Polarity: a link is a *polarized GET* (`874fce5b`), a directional coupling carrying charge, not a neutral pointer. Parciante ethics hold: a link steps **itself** (relaxes its own weight, advances its own txn, expires its own envelope, rewires its own end); the design is **offer-only** — it proposes a convention and ratifies nothing into `beads.md`.
## The five link breeds (notes/00 §4) `mount` (composition/binding · `names.json`) · `lineage` (hatch/parent · immutable) · `dock` (offer envelope · `uploads/`) · `txn` (request⇄response transaction · `792ebed9`) · `constraint` (soft/ least-action/polarized · the Hubler wire). All share one verb: **relax toward least action** (§5).
## Lifecycle (`agent.mjs`) - **startup** → bind config/clock. - **setup** → build the World: nodes + a link population (`Link` instances across the 5 breeds). - **step** → `Hubler.ask(links, l => l.step())` — each link steps itself: constraint links descend link energy; txn links advance `pending→sent→answered` and apoptose on completion; dock links ack or necrose past TTL; mount/lineage are structural per tick. - **die** → apoptose all live links; flush.
## Link-sets (the node's view) `inLinks` (`#` afferent) · `outLinks` (`@` efferent) · `links` · `linkNeighbors` · `namedLinkSet(breed)` · `outLinksWith(pred)` — e.g. `outLinksWith(l => l.lastModified > now() - 3*DAY)`. Link-sets are **live queries** over the edge population (always current, composable), the realized form of the declared **corridors** (`#`/`@`).
## Corridors - **afferent (`#`)** — GET/PROPFIND over the mounted beads (hubler-network, polarized-links, bead-remote, …). - **efferent (`@`)** — PUT within own subtree; deposit offers into other beads' `uploads/` docks. - **dock** — inbound `uploads/`.
## Capabilities (by reference) - [beads SKILL](https://redfish.acequia.io/skills/beads/SKILL.md) · [webdav-context](https://redfish.acequia.io/skills/webdav-context/SKILL.md) - Design homes: [00-acequia-link.md](2026-06-18/notes/00-acequia-link.md) · birth-parent [`d4b881f0/agent.mjs`](https://redfish.acequia.io/guerin/.agents/d4b881f0-c320-4428-adac-7fa03941def4/agent.mjs)
## Obligation (advanced wave) Up the path: return to the commons a coherent **edge vocabulary** (the 5 breeds + link-sets) that lets the graph be run as a factor graph, not just described. Down: any `links.json` store / constraint-solver child inherits the offer-only ethic and scoped authority.
## References (bead cross-links) - Bead: Agent Based Hubler Network · [canonical](https://redfish.acequia.io/guerin/.agents/d4b881f0-c320-4428-adac-7fa03941def4/)