#Using a Copilot room

This guide is for people working in a room. If you are the one starting it, read WALKTHROUGH.md first and come back here.

#The idea

A room is one Copilot session, one repository, and everybody watching the same screen. It is not a chat app with a bot in it. There is a single conversation, a single working directory, and a single agent, and everyone in the room is talking to that one agent.

Two things follow from that, and they explain nearly everything else:

The agent knows who is speaking. Each prompt reaches it as [alice]: …, so you can ask "what did Bob want earlier?" and get a real answer.

#One room, one session

There is no session switcher, and no way to start a second conversation from inside the room. The session id in the header is the conversation. If your team needs two lines of work at once, someone has to run a second room on another port β€” ask whoever set this one up.

One consequence is worth knowing: if the room has been restarted, the transcript you can scroll through may be longer than what the agent remembers. The transcript is the room's own record and survives restarts; the agent's memory belongs to the session, and a restart can start a fresh one. If the agent seems not to know about something you can see further up, that is why β€” quote the part that matters back to it.

#Getting in

Open the URL you were given β€” usually http://<someone's-machine>:3000. You will be offered whichever sign-in methods the room was started with:

MethodWhat you needNotes
GitHuba GitHub accountDevice code, or a browser redirect.
Microsofta work accountDevice code, or a browser redirect.
Guestthe join codeNo account. You are not verified; the badge says guest.

The sign-in screen tells you what happens next β€” "you join as a participant", "a host admits you after sign-in", or "members only".

If you land on "Waiting for a host", you are signed in but not admitted yet. A host has to let you in. If nobody is holding the room open, nothing will happen β€” go and ask them.

#Your badge

Next to your name, top right:

RoleCan promptCan answer approvalsCan abort, admit, change settings
hostyesyesyes
memberyesyesno
viewernonono

A viewer sees everything and can type nothing; the composer says so. A host can promote a viewer to member at any time.

#What you are looking at

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ repo name    idle Β· alice   session 7f3a β”‚  IN THE ROOM     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  alice  host     β”‚
β”‚                                          β”‚  bob    member   β”‚
β”‚  the transcript: prompts, replies,       β”‚  cara   viewer   β”‚
β”‚  tool calls, approval cards              β”‚                  β”‚
β”‚                                          β”‚  QUEUE           β”‚
β”‚                                          β”‚  bob: run tests  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Ask the agent…  / for a skill, @ for an agent      [ Send ] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

#Asking the agent to do something

Type and press Enter. If the agent is idle your prompt starts immediately; if it is busy the button says Queue instead of Send and your prompt joins the line.

Prompts are ordinary language. The agent can read and edit files in the repository, run commands, and search the web β€” subject to approvals below.

Good prompts in a shared room tend to be small and finishable. A prompt that runs for fifteen minutes blocks everyone else, and a long turn is hard for others to follow. Prefer "add a test for the empty-input case in parseConfig" to "improve the test suite".

#The queue

Only one prompt runs at a time. The rest wait, and everyone can see the line.

#Approvals

The agent asks permission before it runs a shell command, writes a file, or fetches a URL. A card appears for everyone, showing exactly what it wants to do β€” the full command, or the diff.

Only the person whose prompt is running gets the buttons. Hosts get them too. Everyone else sees the card read-only, so the room can see what is being asked without four people racing to answer.

Three choices:

You should not have to hunt for one. While any approval is outstanding the header shows a red "1 approval waiting" button β€” it says your call when the answer is yours β€” and clicking it jumps to the card. When a card arrives that is yours to answer, the view scrolls to it. If it is someone else's and you are reading back through the history, you are left where you are; the header button is how you keep track.

Approvals expire. No answer within two minutes counts as a rejection. The transcript records permission timeout and the tool call fails. If you asked for something and then walked away, this is why it "did nothing". The timeout is configurable by whoever runs the room (COPILOT_ROOM_PERMISSION_TIMEOUT).

#Skills: the / menu

A skill is a reusable instruction the repository ships, living in .github/skills/<name>/SKILL.md (or .claude/skills/…). Think of it as a saved, well-written prompt that everyone can invoke by name.

Type / in the composer and a menu appears. Keep typing to narrow it, ↑/↓ to move, Enter or Tab to pick, Esc to clear.

/release-notes since v1.2.0

The skill is expanded into a full prompt and run as a normal turn β€” queued, attributed to you, and visible to everyone, exactly as if you had typed the long version yourself.

The menu also lists the runtime's own commands, marked builtin (/plan, /compact, /review and friends).

Three commands are answered by your browser alone, and never reach the agent or the shared transcript:

CommandDoes
/skillslists the skills this repository ships, then the builtins
/agentslists the custom agents you can address
/refreshre-scans the repository after someone adds or edits a skill

A / the room does not recognise is sent as ordinary text, so a prompt that happens to start with a path is not mangled into a command.

#Custom agents: the @ menu

A custom agent is a specialist with its own instructions and its own tool list, defined in .github/agents/<name>.md (or .claude/agents/…). A reviewer that never edits files, a documentation writer, a test-focused agent.

Type @, pick one, then write your prompt:

@reviewer look at the diff on this branch and tell me what breaks

That prompt runs as a subagent: a separate worker with the agent's own instructions, reporting back into the transcript. You will see

you β†’ @reviewer
β–Ά @reviewer Β· Reviews a diff for correctness bugs without touching the code.
…the reply…
βœ“ @reviewer Β· 12.4s

It applies to that one prompt only. There is no mode to switch on and forget about, and your choice cannot change what anyone else's next turn runs on. If you want three prompts on the reviewer, mention it three times.

If you type an @name the room has never heard of, it tells you immediately rather than queueing something that would fail later.

Adding a new agent file needs the room restarted before it can be addressed β€” /refresh picks up edits to existing ones, but registering a new agent happens when the session is created.

#Reading the transcript

Everything is written to disk in the room's state directory, so the history survives a restart and late joiners get the whole thing.

#If you are a host

You get three extra powers, in the header and the side panel.

Being a host is a duty as much as a power: if the policy is host approves and no host is in the room, nobody new can get in.

#Working together without treading on each other

#When something looks wrong

What you seeWhat is happeningWhat to do
"Waiting for a host" and nothing changesno host is connected to admit youask whoever runs the room to open it
The composer is greyed outyou are a viewerask a host to promote you
permission timeout and a failed tool callnobody answered the approval within two minutesrun the prompt again and answer the card
An approval card you cannot answerit is not your turnthe author or a host answers it
You missed an approval entirelyit arrived while you were reading further upwatch for the red button in the header; click it to jump to the card
Your prompt sits in the queuesomeone else's turn is runningwait, or ask a host to abort it
/yourskill was sent as plain textthe room does not know that name/refresh, or check the spelling with /skills
no custom agent called Xno such agent file, or it needs a restartcheck /agents
The page looks stale or blank after an updateyour browser is holding an old copyhard reload (Ctrl+Shift+R)
You are asked to sign in againthe room restarted and your session cookie is no longer validsign in again
Nothing updates, but others see activityyour tab lost its connectionreload the page