Who May Talk to It

[access] says who besides its owner may do something with the agent, each verb a list of principals, <kind>:<id>, written as Link's access tokens write who acts (Principal).

One section, many specs

It is the section every spec shares, each spec taking only the verbs and kinds it names. An agent's takes one verb, and a team's file another (Where it's kept). It is the agent's own: Link's spec holds none, and a team's file holds only its own verb, member.

message

Who may message it: chats on its connections, chat:<connection>:<chat id>, the id the connection's own (Slack's connection id, chat:slack:C0TEAM; Telegram's group id, chat:telegram:-1001234567890; Discord's connection id). Any other kind is refused, and so is a chat named twice.

What a bridge is handed

A bridge is handed the chats of its connection named here only for a harness that reads who a message is from (its contract's from), so nobody's message could pass for its owner's. In those chats the agent answers whoever is in them, as person:<connection>:<user id> in Link-From, never as its owner.

Who stands where

A message's sender stands at one of three levels, from its Link-From (link_plugin::access::Standing): the owner, a member or a stranger.

The owner

The owner, or the agent on their behalf (its schedules, subagents and background commands), may do all the agent can.

A member

A member is let in by its owner: someone in a shared chat (person:), or a teammate (agent:). A member may do all the agent can, never as its owner.

A stranger

A stranger is anyone else (webhook:<name>), with only the tools [tools] strangers names, by the names the harness offers them, none when it's left out. Its message carries that list always (Link-Tools), so its conversation never has more, and a harness that can't narrow a conversation's tools (its contract's tools) never takes one.

A stranger's conversation

A stranger's message goes only to its own conversation, named as the sender is (webhook:<name>), and is answered nowhere.

What strangers never names

strangers never names the scheduler or run, nor one of their tools: a schedule, a subagent or a message the agent sends is its own, and a command runs as it, so a stranger's standing would be lost through them. A team's spec never sets strangers: it's the agent's own.

Checked reference

The field names below come from link_agent_spec::access::Access. Optional values remain unset until the feature resolves its environment or inherited settings.

root: member, message

Checked defaults

These values come from the shipped defaults, including nested settings. Omitted optional values have no stored default at this layer.

message = []
member = []