Runi's hooks are installed globally, for every session on the machine. The repository list is what keeps them quiet. A session in a folder your workspace does not track publishes nothing and receives nothing. Getting this list right is the difference between a product that briefs your team and one that appears to be broken.
Add a repository#
-
Open Settings → Repositories#
This is a workspace list, not a personal one. Adding a repository makes it tracked for everyone in the workspace, which is the point: a briefing crosses machines, so the boundary has to be the team's.
-
Add it as
owner/repository#Type the pair, or paste the repository's GitHub URL and Runi takes the pair out of it. Owners and admins can add; members and viewers cannot.
Runi identifies a repository by its remote, not by the path on your disk, and the match happens locally on each machine. The repository itself is never read. Your checkout at
~/code/relayand a colleague's atD:\work\relayare the same repository, which is what you want when the point is to brief each other. -
Confirm from the machine#
Open a terminal inside your checkout and run the doctor. The last line tells you what the folder resolves to and whether it counts.
terminal$ cd ~/code/relay $ runi doctor … ok this repo relay is tracked — sessions here publish to the workspace
How a folder becomes a repository#
When a session starts, the daemon resolves the working directory up to the repository root and derives an identity from the Git remote. Three things follow.
- A subdirectory is fine. Starting your agent in
apps/webinside the checkout resolves to the same repository as starting it at the root. - A folder with no remote has no shared identity. A local-only repository can be tracked, but nothing links it to a teammate's copy, because there is nothing to link on.
- A folder that is not a Git repository is not a repository. This is the usual explanation for a silent adapter. See OpenClaw, whose default workspace is exactly that.
Untracked is a real state, not a failure#
Work in a folder that is not on the list and Runi does nothing. Not "records it quietly", not "queues it until you decide". Nothing is captured and nothing is sent. The doctor says so:
warn this repo scratchpad (a1b2c3) is not tracked — sessions here
stay private. Add it in the app under Repositories.
This is how you keep a side project, a client repository or your dotfiles out of the workspace: do not add them. There is no per-session switch to remember, because a switch you have to remember is one you will forget on the session that mattered.
Monorepos and multiple checkouts#
| Situation | What happens |
|---|---|
| One repository, many packages | One entry covers all of it. Overlap warnings and file activity work at path level, so two people in different packages of the same monorepo do not trip over each other. |
| Two checkouts of the same repository | Both publish, under the same repository identity. This is the case Runi is best at catching: two of your own sessions in two worktrees, holding the same file. |
| A fork | A different remote is a different repository. Add it separately if you want it watched. |
| Folders that are not clones | Not tracked by remote. For Codex, they can be mapped explicitly with codexWatchPaths in ~/.relay/config.json. |
Removing a repository#
Remove it in Settings → Repositories. From then on, sessions there stop publishing and stop being briefed. Records already published stay in the workspace: removing the repository is a decision about the future, not a deletion. To remove the history too, see Deleting your data.
Note
The list is cached on each machine. A repository you add in the app reaches a machine on its next publish or briefing, not instantly. If a colleague adds one while your agent session is open, start a new session before concluding it did not work.
Keeping files out of a tracked repository#
Tracking is per repository. Excluding individual paths inside one is a separate
control: built-in secret globs, your .gitignore, a
.relayignore, and patterns you add in the app all narrow what may
be named. See Ignore rules.