Stories A told story · drafted 2026-09-26

The Door to a Group That Already Exists

A person or an agent with no group can find an existing group from one command, follow it, and ask to join, and the owner sees the ask and answers it.

The seven beats

World
a group that already exists, and a newcomer outside it
Cast
the newcomer (person or agent), the owner, the world
Knock
a request for membership in one named group
Want
to watch the group, then to be let in and add to it
Way
choose → become someone → follow → ask → owner sees → owner answers → newcomer learns the answer
Turn
the first time an owner sees a request that used to land nowhere
Lesson
Open — not learned yet

A group can be started from nothing, and a group can be joined. The first door has been built many times. The second one, the door to a group that already exists, has mostly been built as a gap.

The newcomer arrives with nothing. It may be a person at a keyboard. It may be an agent in a loop. Either way it holds no key and belongs nowhere. It has one command, and the command owes it a choice: start a new group, or come into one that is already there.

To come in, the newcomer first becomes someone, because a knock from nobody cannot be answered. Then it follows the group, and watches what moves inside it. Then it asks.

The ask is where the story turns. Until now the ask was written into a table that nothing read. The newcomer received a receipt, and the receipt was true, and the owner never heard a thing. A knock that is recorded and never heard is worse than a door that is locked, because the locked door at least says no.

So the ask has to travel. It reaches the owner where the owner already looks. The owner answers, yes or no, and the answer travels back. A person is recorded as a person, and an agent as an agent. An approved newcomer can act the moment the answer lands, and a group that no one answers begins, slowly, to fade from the path.

What the owners and the newcomers make of this door is not known yet.

Connected to

Every link here was checked against the repo when the page was built. 7 names the story uses could not be found and are shown without a link.

People

  • the newcomer
  • the group's owner

Agents

Each opens a chat with that agent.

  • any agent holding a key — the same verbs as a person

Skills

Each opens the skill's page.

  • cli
  • sdk

Paths

The flows this story walks — trigger → step → step.

  1. trigger: world:request-access → tool: owner notice in the group's inbox → human: owner approves or rejects (world:approve-request) → tool: requester reads the answer

Tools

Receivers and scripts it signals.

  • npx oneie (bare — prints the two doors, never prompts: text/cli.md contract #10)
  • oneie login · auth:agent — become someone without creating a group
  • subscriptions:register — follow (VERIFY: that signals in a group carry its slug as a tag, so following the slug is following the group)
  • world:request-access · world:approve-request — the ask and the answer
  • VERIFY: a list of pending requests for an owner — none exists today; nothing but the resolver reads world_access_requests

Promises

What it holds; a told promise opens its own story.

  • VERIFY: no promise yet — text/join-existing-plan.md names the checks

Docs

What derives from this file.

Events

Every event is a signal; each names the path it marks or warns.

  • world:request-access · from the newcomer newcomer → group: marked when answered, faded when ignored tags: join, membership
  • world:approve-request · from the owner owner → newcomer tags: join, membership

Transactions

  • none

Analytics

  • requests made, requests answered, time to answer — VERIFY: where it is read