Privacy & Visibility
Every session, plan, and project you push has a privacy level and an optional expiration.
Privacy levels
Public
Public sessions and plans appear on your profile page and are discoverable by anyone browsing the site.
rn session push --public
Secret
Secret sessions and plans are only accessible via their direct URL. They don't appear on your profile or in any listing. Anyone with the URL can view them, but the URL contains a cryptographic nanoid that is not guessable.
rn session push --secret
This is the default.
Private
Private sessions and plans are only accessible to you. They don't appear on your profile, and anyone else visiting the URL sees a 404 — indistinguishable from non-existent content.
rn session push --private
To view a private session or plan in your browser:
rn session open <id>
rn plan open <name>
The open command generates a short-lived signed URL (valid for 1 hour) that lets you view private content in the browser.
Default privacy
The default privacy level is secret. You can change this in your config:
[global]
privacy = "public" # public, secret, or private
Or override per resource type:
[session]
privacy = "secret"
[plan]
privacy = "public"
The precedence is: CLI flag > resource-type config > global config > default (secret).
Project privacy ceiling
Projects act as a privacy ceiling for their contents. A private project hides all its sessions and plans from non-owners, regardless of individual item privacy levels. A public or secret project shows items according to their own privacy levels.
| Project privacy | Item privacy | Visible to non-owners? |
|---|---|---|
| public | public | Yes |
| public | secret | Yes (via direct URL) |
| public | private | No |
| secret | public | Yes (via project URL) |
| private | any | No |
Expiration
Set an expiration when pushing:
rn session push --expires 7d
rn plan push my-plan --expires 30d
Duration format
1h— 1 hour24h— 24 hours7d— 7 days30d— 30 days365d— 1 year
What happens on expiry
When a session or plan expires, it becomes inaccessible. A background cleanup process permanently deletes expired content. The URL returns a 404.
Default expiration
Set a default in your config:
[global]
expires = "30d" # all content expires in 30 days unless overridden
Or per resource type:
[session]
expires = "7d"
[plan]
expires = "90d"
If no expiration is set (and no default is configured), content persists until you delete it manually.
Updating metadata
You can change the privacy and expiration of existing content through the API:
PATCH /api/v1/sessions/{nanoid}
PATCH /api/v1/plans/{nanoid}
See the API Reference for details.