One session to another
Every session binds its own socket and answers for itself, so the directory is the registry. Two walls decide who may reach whom.
Two walls
| wall | means |
|---|---|
| the project wall | a session sees only its own project's directory. Not should not — another project's sessions are somewhere this one never lists. |
| the instance wall | a main is its instance's front door; the subagents behind it are private. |
Widening the second one
magi.agent_talk | lets |
|---|---|
"mains" | two sessions started at a terminal talk to each other, and a subagent talk to whoever started it. Nothing else. The default. |
"instance" | and subagents of the same parent talk to each other |
"project" | and anything in the project reach anything else in it |
Sessions in different projects never can, at any setting. This only widens things inside one project, and nothing widens it further.
What a session may say
The vocabulary has no verb that runs anything. It sends messages, reads an inbox,
and says who is listening — deliberately, and melchior's own tests refuse a verb named
run, shell, exec or eval.
That is why magi grants the agent tool in advance rather than asking. Granting it grants the ability to talk to other sessions, which is the whole of what the tool is for — and asking here cannot work anyway: the prompt would land mid-conversation, stopping the turn a sibling's question started on a keystroke nobody was told about.
A socket nobody answers
A process that died did not get to remove itself from a list, so a stale socket looks exactly like a live one until something connects. Liveness is asked, never assumed: one cheap call settles it. Dialling is not liveness either — the kernel accepts on behalf of a listener whose owner has stopped reading, so a wedged sibling accepts instantly and then never answers.