@rizom/ops 0.2.0-alpha.8 → 0.2.0-alpha.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +7 -3
  2. package/dist/age-key-bootstrap.d.ts +17 -0
  3. package/dist/brains-ops.js +278 -156
  4. package/dist/cert-bootstrap.d.ts +3 -3
  5. package/dist/content-repo.d.ts +13 -0
  6. package/dist/default-user-runner.d.ts +1 -1
  7. package/dist/deploy.js +3 -170
  8. package/dist/entries/deploy.d.ts +2 -2
  9. package/dist/index.d.ts +4 -0
  10. package/dist/index.js +278 -156
  11. package/dist/load-registry.d.ts +22 -3
  12. package/dist/observed-status.d.ts +1 -1
  13. package/dist/onboard-user.d.ts +2 -2
  14. package/dist/origin-ca.d.ts +1 -1
  15. package/dist/parse-args.d.ts +2 -0
  16. package/dist/push-secrets.d.ts +1 -1
  17. package/dist/reconcile-all.d.ts +2 -2
  18. package/dist/reconcile-cohort.d.ts +2 -2
  19. package/dist/reconcile-lib.d.ts +4 -2
  20. package/dist/run-command.d.ts +1 -2
  21. package/dist/run-subprocess.d.ts +1 -0
  22. package/dist/schema.d.ts +107 -0
  23. package/dist/secrets-encrypt.d.ts +29 -0
  24. package/dist/secrets-push.d.ts +1 -1
  25. package/dist/ssh-key-bootstrap.d.ts +1 -1
  26. package/dist/user-add.d.ts +15 -0
  27. package/dist/user-runner.d.ts +5 -0
  28. package/dist/verify-user.d.ts +19 -0
  29. package/package.json +7 -3
  30. package/templates/rover-pilot/.env.schema +16 -2
  31. package/templates/rover-pilot/.github/workflows/build.yml +13 -5
  32. package/templates/rover-pilot/.github/workflows/deploy.yml +73 -20
  33. package/templates/rover-pilot/.github/workflows/reconcile.yml +16 -2
  34. package/templates/rover-pilot/README.md +6 -3
  35. package/templates/rover-pilot/deploy/scripts/decrypt-user-secrets.ts +78 -0
  36. package/templates/rover-pilot/deploy/scripts/provision-server.ts +1 -1
  37. package/templates/rover-pilot/deploy/scripts/resolve-deploy-handles.ts +15 -4
  38. package/templates/rover-pilot/deploy/scripts/resolve-user-config.ts +12 -12
  39. package/templates/rover-pilot/deploy/scripts/sync-content-repo.ts +179 -0
  40. package/templates/rover-pilot/deploy/scripts/update-dns.ts +14 -4
  41. package/templates/rover-pilot/docs/onboarding-checklist.md +40 -14
  42. package/templates/rover-pilot/docs/operator-playbook.md +129 -10
  43. package/templates/rover-pilot/docs/user-onboarding.md +182 -199
  44. package/templates/rover-pilot/package.json +3 -0
  45. package/templates/rover-pilot/pilot.yaml +3 -0
  46. package/templates/rover-pilot/users/alice.yaml +5 -1
  47. package/dist/user-secret-names.d.ts +0 -6
  48. package/templates/rover-pilot/.kamal/hooks/pre-deploy +0 -9
  49. package/templates/rover-pilot/deploy/Caddyfile +0 -66
  50. package/templates/rover-pilot/deploy/Dockerfile +0 -38
  51. package/templates/rover-pilot/deploy/kamal/deploy.yml +0 -40
@@ -2,339 +2,316 @@
2
2
 
3
3
  Welcome to the Rover pilot.
4
4
 
5
- This document is written for **first-time users**. You do **not** need prior experience with Rover, MCP, git, or the rest of the system to get started.
5
+ This guide is for first-time Rover users. You do not need prior experience with Rover, MCP, git, GitHub, or Obsidian to get started.
6
6
 
7
7
  ## What Rover is
8
8
 
9
9
  Rover is your private AI assistant for working with your own notes, links, and ideas.
10
10
 
11
- In this pilot, Rover is intentionally simple:
11
+ For the current pilot, the normal core experience is:
12
12
 
13
- - you talk to it through an **MCP client**
14
- - **there is no website to browse**
15
- - Discord is optional
16
- - Obsidian fits through the git-sync/content-repo workflow, not as the main chat interface
13
+ - **Passkey setup email** your secure first step
14
+ - **Discord** the main chat interface when enabled for your pilot
15
+ - **Dashboard** your browser overview at `https://<handle>.rizom.ai/`
16
+ - **MCP** optional direct access from OAuth/passkey-capable AI clients
17
17
 
18
- You can think of Rover as a private knowledge companion that helps you:
18
+ Some users may also receive:
19
19
 
20
- - save notes
21
- - save links
22
- - reflect on your own material
23
- - find patterns in what you have collected
24
- - think through questions with AI
20
+ - **CMS** access at `https://<handle>.rizom.ai/cms`
21
+ - **GitHub/content repo** access for editing the underlying markdown files
22
+ - **Obsidian** instructions for a local file-based workflow
25
23
 
26
- ## What you will receive from us
27
-
28
- We will send you the details you need to connect.
29
-
30
- That usually includes:
31
-
32
- - your Rover URL: `https://<handle>.rizom.ai/mcp`
33
- - your **Bearer token**
34
- - confirmation of whether Discord is enabled for you
35
- - if needed, an invite to your **private** Rover content repo
36
- - any extra instructions if we are testing a specific workflow with your cohort
24
+ If we did not explicitly give you CMS, GitHub, MCP, or Obsidian instructions, you can ignore those sections for now.
37
25
 
38
- Treat the **Bearer token** like a password. Do not share it.
26
+ ## Start here: setup
39
27
 
40
- ## One important idea: MCP is just the connection method
28
+ 1. Open the setup email from Rover.
29
+ 2. Click the passkey setup link.
30
+ 3. Register a passkey in your browser.
31
+ 4. Open your Dashboard: `https://<handle>.rizom.ai/`.
32
+ 5. If Discord is enabled for you, send Rover a first message there.
33
+ 6. If we asked you to test MCP, use the separate MCP connection instructions we sent for your pilot.
41
34
 
42
- If you have never used MCP before, the shortest explanation is:
35
+ ## Your setup email
43
36
 
44
- - **Rover** is the assistant
45
- - **MCP** is the way your AI client connects to Rover
37
+ The setup email contains a single-use passkey setup link.
46
38
 
47
- You do not need to understand the protocol details.
39
+ Treat that link like a temporary password:
48
40
 
49
- For the pilot, the practical meaning is simple:
41
+ - do not forward it
42
+ - use it once
43
+ - expect it to expire
44
+ - ask us for help if it has expired or does not work
50
45
 
51
- - open a supported client
52
- - add your Rover URL
53
- - paste your Bearer token
54
- - start talking to Rover
46
+ After you register your passkey, the setup link closes. Your passkey becomes the sign-in method for Rover's browser and OAuth-capable client flows.
55
47
 
56
- ## What to use first
48
+ If your Rover already existed before you received this email, nothing is being reset. The email is just the secure handoff for registering your own passkey so you can sign in yourself.
57
49
 
58
- For most users, the easiest first setup is:
50
+ ## Your first Rover session
59
51
 
60
- - **Claude Desktop** for talking to Rover
61
- - **Obsidian** only if you also want to work directly with markdown files later
62
- - **Discord** only if we explicitly enable it for you
52
+ Start in **Discord** if it is enabled for your pilot. That is the normal first interface.
63
53
 
64
- ## How to connect
54
+ ### 1. Say hello
65
55
 
66
- Use an MCP client that supports:
56
+ Send:
67
57
 
68
- - **HTTP / Streamable HTTP MCP**
69
- - **Bearer token authentication**
58
+ > What can you help me do, and what should I use you for?
70
59
 
71
- When your client asks for connection details, use:
60
+ Rover should answer with a short overview of what it can do.
72
61
 
73
- - **Server URL:** `https://<handle>.rizom.ai/mcp`
74
- - **Authentication type:** Bearer token
75
- - **Bearer token:** the token we sent you
62
+ ### 2. Create your first note
76
63
 
77
- If the client asks for a name, use something simple like:
64
+ Ask Rover to save a simple note:
78
65
 
79
- - `Rover (<handle>)`
66
+ > Save a note: I am trying Rover because I want a better way to collect ideas, links, and questions in one place.
80
67
 
81
- ## Claude Desktop setup
68
+ Or:
82
69
 
83
- If your Claude Desktop version supports connecting to a **remote HTTP / Streamable HTTP MCP server**, enter:
70
+ > Help me save my first note.
84
71
 
85
- - **Server URL:** `https://<handle>.rizom.ai/mcp`
86
- - **Authentication:** Bearer token
87
- - **Token:** the token we sent you
72
+ ### 3. Add your first link
88
73
 
89
- Then try a first message like:
74
+ Send Rover a link you want to remember:
90
75
 
91
- > What can you help me do, and what should I use you for?
76
+ > Save this link and tell me why it might be useful later: https://example.com
92
77
 
93
78
  Or:
94
79
 
95
- > Help me save my first note.
80
+ > Add this as a link about tools I want to revisit: https://example.com
96
81
 
97
- If your Claude Desktop version only supports local MCP servers and not remote HTTP MCP cleanly, tell us what version you are using and we will help you.
82
+ Rover should save the link and, when possible, keep a short description of why it matters.
98
83
 
99
- ## Your first 5 minutes
84
+ ### 4. Upload an existing Markdown doc
100
85
 
101
- Once you are connected, try this sequence:
86
+ If you already have notes or docs in Markdown, you do not need to retype them.
102
87
 
103
- ### 1. Check that Rover responds
88
+ Upload a `.md` file and ask Rover to save or import it:
104
89
 
105
- Ask:
90
+ > Save this Markdown doc in my notes.
106
91
 
107
- > What can you help me do?
92
+ Or:
108
93
 
109
- ### 2. Save a first note
94
+ > Import this doc and tell me what it is about.
110
95
 
111
- Ask:
96
+ This is often the fastest way to give Rover useful context.
112
97
 
113
- > Save a note: I want to use Rover to collect ideas from my work, reading, and conversations.
98
+ ### 5. Ask Rover about what you just added
114
99
 
115
- ### 3. Save a useful link
100
+ After you have saved a note, link, or Markdown doc, ask Rover to reflect it back:
116
101
 
117
- Ask:
102
+ > What have I added so far?
118
103
 
119
- > Save this link and note why it matters to me: <paste URL>
104
+ Or:
120
105
 
121
- ### 4. Ask Rover to reflect back what it knows
106
+ > What do you know about what I am interested in so far?
122
107
 
123
- Ask:
108
+ This is the basic Rover loop: add material, then ask Rover to help you think with it.
124
109
 
125
- > Based on what I’ve stored so far, what themes are starting to emerge?
110
+ ### 6. Try a more useful task
126
111
 
127
- ### 5. Use it as a thinking partner
112
+ Once Rover has a little context, try one of these:
128
113
 
129
- Ask:
114
+ > Summarize my notes so far.
130
115
 
131
- > I am thinking through a problem in my work. Help me structure the question and identify what context is missing.
116
+ > What themes do you see in what I have added?
132
117
 
133
- ## Wishlist: when Rover cannot do something yet
118
+ > Turn my rough note into a clearer paragraph.
134
119
 
135
- Rover has a built-in **wishlist**.
120
+ > Help me make a small reading list from the links I saved.
136
121
 
137
- This is important for first-time users because Rover will not be able to do everything yet.
122
+ These examples show the main scope of Rover: saving material, organizing it, reflecting on it, and helping you make something from it.
138
123
 
139
- If you ask for something Rover cannot do, it should add that request to the wishlist instead of just failing silently.
124
+ ### 7. Ask another agent
140
125
 
141
- You can think of the wishlist as:
126
+ If your pilot has agent-to-agent access enabled, we will tell you which other agents you can address and how to talk to them. Otherwise Rover should clearly say that this workflow is not available yet.
142
127
 
143
- - a backlog of missing capabilities
144
- - a record of things users want Rover to do
145
- - a way for the pilot team to see which missing features matter most
128
+ ## The default mental model
146
129
 
147
- ### When the wishlist is useful
130
+ If you remember only one thing, remember this:
148
131
 
149
- The wishlist is especially useful when you ask Rover to do something like:
132
+ - **Discord** = talk to Rover, when enabled
133
+ - **Dashboard** = browser overview
134
+ - **MCP** = optional direct client integration through OAuth/passkey login
135
+ - **CMS / git / Obsidian** = optional content-editing workflows when we enable them for you
150
136
 
151
- - connect to a tool it does not support yet
152
- - perform an action it cannot perform yet
153
- - add a workflow or feature that does not exist yet
137
+ ## What you will receive from us
154
138
 
155
- Examples:
139
+ Depending on your pilot cohort, we will send you some or all of these:
156
140
 
157
- > I want Rover to draft and send emails for me.
141
+ - a passkey setup email from Rover
142
+ - this onboarding guide, or a link to it
143
+ - confirmation that Discord is enabled for you, plus the invite/setup steps
144
+ - your **Dashboard URL**: `https://<handle>.rizom.ai/`
145
+ - CMS URL and GitHub token instructions, if CMS editing is enabled
146
+ - private content repo access, if file-based editing is enabled
147
+ - separate MCP connection instructions, if MCP testing is enabled
148
+ - any extra instructions if we are testing a specific workflow with your cohort
158
149
 
159
- > I want Rover to connect to my calendar.
150
+ Keep setup links, GitHub tokens, and any MCP credentials separate. Do not paste the passkey setup link into an MCP client.
160
151
 
161
- > I want Rover to summarize voice notes automatically.
152
+ ## Discord
162
153
 
163
- If Rover cannot actually do those things yet, it should tell you that and add the request to the wishlist.
154
+ Discord is the default chat interface when it is enabled for your pilot. It is separate from the passkey setup email: the email sets up browser/client identity, while Discord is where many users chat with Rover day to day.
164
155
 
165
- ### What happens when something is added to the wishlist
156
+ Use it to:
166
157
 
167
- When a request is added to the wishlist:
158
+ - save quick notes
159
+ - drop in links
160
+ - ask questions
161
+ - use Rover day to day without setting up a separate client
168
162
 
169
- - it is saved as a **wish**
170
- - it starts in a **new** state
171
- - similar requests can be grouped together instead of creating endless duplicates
172
- - repeated demand can increase the count of how many times that wish was requested
163
+ If Discord is enabled, we will send the exact invite/setup steps separately.
173
164
 
174
- That helps us see which gaps are one-off ideas and which ones keep coming up across real usage.
165
+ ## Dashboard basics
175
166
 
176
- ### How you should use it
167
+ The Dashboard is the browser landing page for your Rover.
177
168
 
178
- You do **not** need special commands.
169
+ Open it at:
179
170
 
180
- Just ask naturally.
171
+ ```text
172
+ https://<handle>.rizom.ai/
173
+ ```
181
174
 
182
- If Rover cannot do what you asked, a good response from Rover is something like:
175
+ Use it to confirm your Rover is up, see available endpoints, and orient yourself before using optional tools. This is not meant to be a public marketing website.
183
176
 
184
- - it explains the limitation clearly
185
- - it says the request was added to the wishlist
177
+ ## Optional: Working in the CMS
186
178
 
187
- If that does **not** happen, that is useful feedback for us too.
179
+ If CMS is enabled for you, open:
188
180
 
189
- ## Obsidian
181
+ ```text
182
+ https://<handle>.rizom.ai/cms
183
+ ```
190
184
 
191
- Obsidian is part of the pilot through the **git-synced content repo workflow**, not through MCP.
185
+ The CMS is a browser editor for your Rover content. It may ask for GitHub access because your content lives in a private GitHub repo.
192
186
 
193
- That means:
187
+ Use the CMS when you want to:
194
188
 
195
- - use **Claude Desktop** as the main way to talk to Rover
196
- - use **Obsidian** if you want to browse, draft, and edit markdown files directly
197
- - Rover can pick up those file changes through the normal git-sync / directory-sync flow
189
+ - create or edit notes in the browser
190
+ - add existing Markdown docs
191
+ - browse structured content collections
192
+ - make cleaner edits than you would in chat
198
193
 
199
- A simple mental model:
194
+ A good first CMS task is:
200
195
 
201
- - **Claude Desktop** = talk to Rover
202
- - **Obsidian** = edit the underlying notes
196
+ 1. open the **Notes** collection
197
+ 2. create a note titled `Why I’m using Rover`
198
+ 3. write 3 to 5 sentences
199
+ 4. save it
200
+ 5. refresh the CMS and confirm the note is still there
203
201
 
204
- ### Important: your content repo is private
202
+ If the CMS asks for GitHub access, use the fine-grained GitHub token for your private Rover content repo. If you were not given CMS/GitHub instructions, skip this section.
205
203
 
206
- If you use the Obsidian/git workflow, you will be working in your own **private** GitHub repo.
204
+ ## Optional: direct MCP access
207
205
 
208
- That means:
206
+ MCP is an optional way to connect Rover directly to an AI client that supports remote HTTP MCP.
209
207
 
210
- - you do **not** need repo access just to use Rover through MCP
211
- - you **do** need GitHub access if you want to clone, edit, and push to your content repo
212
- - we will invite you only to **your own** content repo, not to the operator repo and not to other users' repos
208
+ Use MCP only if we ask you to test it or if you already use a client that supports remote HTTP / Streamable HTTP MCP servers.
213
209
 
214
- ### How you get access
210
+ We will send MCP connection details separately when MCP testing is enabled. The normal hosted MCP path is `https://<handle>.rizom.ai/mcp`, but use the exact server URL we send for your pilot.
215
211
 
216
- If you want the Obsidian/git workflow, we will:
212
+ ### What the MCP login flow looks like
217
213
 
218
- 1. create or confirm your private content repo
219
- 2. invite your GitHub account to that repo
220
- 3. ask you to accept the GitHub invite
221
- 4. send you the repo URL
214
+ If your client supports OAuth / browser login, the normal flow is:
222
215
 
223
- ### Easiest setup for most users
216
+ 1. In your MCP client, add a remote MCP server.
217
+ 2. Enter the Rover MCP server URL we sent you.
218
+ 3. The client discovers Rover's OAuth settings automatically.
219
+ 4. The client opens a browser window for Rover login.
220
+ 5. You sign in with your passkey.
221
+ 6. Rover asks you to approve client access.
222
+ 7. The client receives an access token automatically.
223
+ 8. You can use Rover tools from that client.
224
224
 
225
- The easiest path for most first-time users is:
225
+ You should not need to copy a setup link into the client. The setup link is only for registering your first passkey.
226
226
 
227
- 1. install **GitHub Desktop**
228
- 2. accept the repo invite in GitHub
229
- 3. clone the private repo with GitHub Desktop
230
- 4. open the cloned folder as an Obsidian vault
231
- 5. optionally install the **Obsidian Git** plugin if you want in-app commit/push/pull support
232
- 6. edit your markdown notes
233
- 7. commit and push your changes
227
+ If your client asks for a token or other credential, use only the MCP instructions we sent separately. Treat any MCP credentials like a password. Do not share them.
234
228
 
235
- ### Authentication options
229
+ ### Client-specific notes
236
230
 
237
- To work with a private repo, you need GitHub authentication.
231
+ Different MCP clients support remote HTTP and OAuth at different speeds. If you are using Claude Desktop, Cursor, VS Code, MCP Inspector, or another client, tell us the exact version before assuming it should work.
238
232
 
239
- Usually the easiest order is:
233
+ ### If MCP does not work
240
234
 
241
- 1. **GitHub Desktop** or normal GitHub sign-in
242
- 2. **SSH key** if you already use git that way
243
- 3. a **fine-grained personal access token** only if another tool specifically requires it
235
+ Send us:
244
236
 
245
- You do **not** need a personal access token just to use Rover through MCP.
237
+ - the client name
238
+ - the client version
239
+ - the exact error message
240
+ - a screenshot if possible
241
+ - the server URL you entered, without any secret token
246
242
 
247
- If we have already shared your content repo workflow with you, the normal setup is:
243
+ Do not paste your passkey setup link into an MCP client.
248
244
 
249
- 1. clone your Rover content repo locally
250
- 2. open that folder as an Obsidian vault
251
- 3. optionally install the **Obsidian Git** plugin if you want in-app commit/push/pull support
252
- 4. edit or organize your markdown notes there
253
- 5. commit and push your changes through normal git or the Obsidian Git plugin
254
- 6. let the normal git-sync flow carry those changes into Rover
245
+ ## Optional: git, text files, and Obsidian
255
246
 
256
- If we have **not** given you a direct content repo workflow yet, that is fine. You can ignore Obsidian for now and use Rover purely through MCP.
247
+ Rover content can also live as normal markdown/text files in a private GitHub repo.
257
248
 
258
- ## Discord (optional)
249
+ This workflow is optional. Use it only if we explicitly enabled it for you or if you want more control.
259
250
 
260
- Discord is optional in this pilot.
251
+ If enabled, we will:
261
252
 
262
- If it is enabled for you, think of it as a lightweight secondary interface for:
253
+ 1. create or confirm your private content repo
254
+ 2. invite your GitHub account to that repo
255
+ 3. send you the repo URL
256
+ 4. explain whether to use GitHub Desktop, command-line git, Obsidian, or the CMS
263
257
 
264
- - quick note capture
265
- - dropping in links to save
266
- - short questions when you do not want to open Claude Desktop
258
+ You do not need GitHub repo access just to use Rover in Discord.
267
259
 
268
- Important:
260
+ ## Wishlist: when Rover cannot do something yet
269
261
 
270
- - **MCP remains the main interface**
271
- - Discord is **off by default**
272
- - if you want Discord, tell us explicitly
273
- - for this pilot, Discord-enabled users may need to supply their own bot token
274
- - if Discord is enabled, we will send the exact invite/setup steps separately
262
+ Rover has a built-in wishlist.
275
263
 
276
- If Discord is **not** enabled for you, that is completely normal.
264
+ If you ask for something Rover cannot do yet, it should explain the limitation and save the request as a wish. This helps us see which missing capabilities matter most.
277
265
 
278
266
  ## What to expect in the pilot
279
267
 
280
- This is a real working system, but it is still an early pilot.
281
-
282
- So you should expect:
283
-
284
- - some rough edges
285
- - a setup process that may still be a bit manual
286
- - a Rover that becomes more useful as you add more notes and links
287
- - occasional follow-up questions from us about your experience
288
- - improvements and changes during the pilot
289
-
290
- That is normal. The point of the pilot is to learn from real use.
268
+ This is a real working system, but it is still an early pilot. Expect some rough edges, setup steps that may still be a bit manual, and improvements during the pilot.
291
269
 
292
270
  ## Privacy and boundaries
293
271
 
294
272
  For the pilot:
295
273
 
296
274
  - your Rover is deployed specifically for you
297
- - access to `/mcp` is protected by your Bearer token
298
- - you should avoid putting highly sensitive material into the pilot unless we have explicitly agreed that it is in scope
275
+ - browser/client access uses passkeys/OAuth where supported
276
+ - if you are using MCP, we will send separate access instructions
277
+ - your content repo is private when repo access is enabled
278
+ - avoid putting highly sensitive material into the pilot unless we have explicitly agreed that it is in scope
299
279
 
300
280
  If you are unsure whether something belongs in Rover, ask us first.
301
281
 
302
282
  ## Troubleshooting
303
283
 
304
- ### I opened the domain and it does not look like a normal site
284
+ ### I did not receive the setup email
305
285
 
306
- That is expected. In this pilot, **there is no website to browse**. Rover core is MCP-first.
286
+ Check spam/promotions first. If it is not there, tell us which email address we should use.
307
287
 
308
- ### I got an authentication error
288
+ ### The setup link expired or does not work
309
289
 
310
- Usually this means one of three things:
290
+ Reply to your Rover operator. We can rotate/reissue setup.
311
291
 
312
- - the Bearer token was missing
313
- - the Bearer token was pasted incorrectly
314
- - the client is using the wrong authentication type
292
+ ### I opened the domain and it does not look like a normal public site
315
293
 
316
- Double-check that you are using:
294
+ That is expected. The root URL is your Dashboard, not a public marketing site.
317
295
 
318
- - URL: `https://<handle>.rizom.ai/mcp`
319
- - auth type: **Bearer token**
320
- - token: exactly the token we sent you
296
+ ### The browser asks me to use a passkey
321
297
 
322
- ### My MCP client says it cannot connect
298
+ That is expected after setup. Use the same passkey you registered from the setup email.
323
299
 
324
- Some clients support local MCP servers better than remote HTTP MCP servers.
300
+ ### My MCP client cannot connect
325
301
 
326
- If that happens, send us:
302
+ Send us the client name, version, exact error message, and a screenshot if possible.
327
303
 
328
- - the name of the client
329
- - the version you are using
330
- - the exact error message
331
- - a screenshot if possible
304
+ ### The CMS asks for GitHub auth and I am not sure what to do
305
+
306
+ That is expected only if CMS is enabled for you. Use the GitHub token instructions we sent for your private Rover content repo. If you did not receive those instructions, ask us before continuing.
332
307
 
333
308
  ## What feedback helps us most
334
309
 
335
310
  We especially want to hear:
336
311
 
337
312
  - what was confusing during setup
313
+ - whether the setup email and passkey flow made sense
314
+ - whether Discord and Dashboard made sense
338
315
  - what felt useful immediately
339
316
  - what felt weak, awkward, or unclear
340
317
  - what you expected Rover to do but could not get it to do
@@ -347,10 +324,16 @@ Short, honest feedback is perfect.
347
324
  When we onboard you, the message will look roughly like this:
348
325
 
349
326
  ```text
350
- Rover URL: https://<handle>.rizom.ai/mcp
351
- Auth type: Bearer token
352
- Bearer token: <token>
327
+ Setup email: sent to <email>
328
+ Onboarding guide: attached / linked
329
+ Dashboard URL: https://<handle>.rizom.ai/
353
330
  Discord enabled: yes/no
331
+ Discord setup: <invite link or setup steps>
332
+ MCP access: optional / enabled / not enabled
333
+ MCP setup: sent separately if enabled
334
+ CMS enabled: yes/no
335
+ CMS URL: https://<handle>.rizom.ai/cms
336
+ Content repo access: yes/no
354
337
  ```
355
338
 
356
339
  If anything is unclear, reply with the exact error text or a screenshot and we will help.
@@ -3,6 +3,9 @@
3
3
  "private": true,
4
4
  "type": "module",
5
5
  "packageManager": "bun@__BUN_VERSION__",
6
+ "dependencies": {
7
+ "age-encryption": "^0.3.0"
8
+ },
6
9
  "devDependencies": {
7
10
  "@rizom/ops": "__BRAINS_OPS_VERSION__"
8
11
  }
@@ -6,3 +6,6 @@ contentRepoPrefix: rover-
6
6
  domainSuffix: .rizom.ai
7
7
  preset: core
8
8
  aiApiKey: AI_API_KEY
9
+ gitSyncToken: GIT_SYNC_TOKEN
10
+ contentRepoAdminToken: CONTENT_REPO_ADMIN_TOKEN
11
+ agePublicKey: age1replace-with-your-public-key
@@ -1,3 +1,7 @@
1
1
  handle: alice
2
+ anchorProfile:
3
+ name: Alice Example
4
+ description: Replace this with Alice's real public profile summary.
2
5
  discord:
3
- enabled: false
6
+ enabled: true
7
+ # anchorUserId: "123456789012345678"
@@ -1,6 +0,0 @@
1
- export interface UserSecretNames {
2
- gitSyncTokenSecretName: string;
3
- mcpAuthTokenSecretName: string;
4
- discordBotTokenSecretName: string;
5
- }
6
- export declare function deriveUserSecretNames(handle: string): UserSecretNames;
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- BRAIN_FILE="${BRAIN_YAML_PATH:-brain.yaml}"
5
- SSH_USER="$(ruby -e 'require "yaml"; config = YAML.load_file("deploy/kamal/deploy.yml") || {}; puts(config.dig("ssh", "user") || "root")')"
6
- IFS=',' read -ra HOSTS <<< "$KAMAL_HOSTS"
7
- for host in "${HOSTS[@]}"; do
8
- scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BRAIN_FILE" "${SSH_USER}@${host}:/opt/brain.yaml"
9
- done