@rizom/ops 0.2.0-alpha.7 → 0.2.0-alpha.70
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.
- package/README.md +6 -3
- package/dist/age-key-bootstrap.d.ts +17 -0
- package/dist/brains-ops.js +262 -156
- package/dist/cert-bootstrap.d.ts +3 -3
- package/dist/content-repo.d.ts +13 -0
- package/dist/default-user-runner.d.ts +1 -1
- package/dist/deploy.js +3 -170
- package/dist/entries/deploy.d.ts +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.js +262 -156
- package/dist/load-registry.d.ts +19 -3
- package/dist/observed-status.d.ts +1 -1
- package/dist/onboard-user.d.ts +2 -2
- package/dist/origin-ca.d.ts +1 -1
- package/dist/parse-args.d.ts +2 -0
- package/dist/push-secrets.d.ts +1 -1
- package/dist/reconcile-all.d.ts +2 -2
- package/dist/reconcile-cohort.d.ts +2 -2
- package/dist/reconcile-lib.d.ts +4 -2
- package/dist/run-command.d.ts +1 -2
- package/dist/run-subprocess.d.ts +1 -0
- package/dist/schema.d.ts +100 -0
- package/dist/secrets-encrypt.d.ts +32 -0
- package/dist/secrets-push.d.ts +1 -1
- package/dist/ssh-key-bootstrap.d.ts +1 -1
- package/dist/user-add.d.ts +15 -0
- package/dist/user-runner.d.ts +5 -0
- package/package.json +7 -3
- package/templates/rover-pilot/.env.schema +11 -0
- package/templates/rover-pilot/.github/workflows/build.yml +4 -4
- package/templates/rover-pilot/.github/workflows/deploy.yml +75 -20
- package/templates/rover-pilot/.github/workflows/reconcile.yml +16 -2
- package/templates/rover-pilot/README.md +6 -3
- package/templates/rover-pilot/deploy/scripts/decrypt-user-secrets.ts +83 -0
- package/templates/rover-pilot/deploy/scripts/provision-server.ts +1 -1
- package/templates/rover-pilot/deploy/scripts/resolve-deploy-handles.ts +15 -4
- package/templates/rover-pilot/deploy/scripts/resolve-user-config.ts +12 -12
- package/templates/rover-pilot/deploy/scripts/sync-content-repo.ts +179 -0
- package/templates/rover-pilot/deploy/scripts/update-dns.ts +14 -4
- package/templates/rover-pilot/docs/onboarding-checklist.md +28 -12
- package/templates/rover-pilot/docs/operator-playbook.md +43 -5
- package/templates/rover-pilot/docs/user-onboarding.md +292 -99
- package/templates/rover-pilot/package.json +3 -0
- package/templates/rover-pilot/pilot.yaml +4 -0
- package/templates/rover-pilot/users/alice.yaml +5 -1
- package/dist/user-secret-names.d.ts +0 -6
- package/templates/rover-pilot/.kamal/hooks/pre-deploy +0 -9
- package/templates/rover-pilot/deploy/Caddyfile +0 -66
- package/templates/rover-pilot/deploy/Dockerfile +0 -38
- package/templates/rover-pilot/deploy/kamal/deploy.yml +0 -39
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
# Onboarding Checklist
|
|
2
2
|
|
|
3
3
|
1. Run `bun install` so the repo uses its pinned `@rizom/ops` version.
|
|
4
|
-
2.
|
|
5
|
-
3.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
2. Run `bunx brains-ops age-key:bootstrap <repo> --push-to gh`.
|
|
5
|
+
3. Fill in `pilot.yaml`.
|
|
6
|
+
- keep your pinned `brainVersion`
|
|
7
|
+
- confirm shared selectors for `aiApiKey`, `gitSyncToken`, `contentRepoAdminToken`, and `mcpAuthToken`
|
|
8
|
+
- use different tokens for `contentRepoAdminToken` and `gitSyncToken`: admin creates/checks content repos; sync is used by runtime directory-sync
|
|
9
|
+
- confirm `agePublicKey`
|
|
10
|
+
4. Run `bunx brains-ops user:add <repo> <handle> --cohort <cohort>`.
|
|
11
|
+
- Discord is enabled by default for pilot users.
|
|
12
|
+
- if the user should be an anchor there, add `--anchor-id <discord-user-id>`.
|
|
13
|
+
- the command creates `users/<handle>.yaml`, `users/<handle>.secrets.yaml`, and the cohort membership without duplicating existing entries.
|
|
14
|
+
5. Edit the generated user file if the anchor profile needs richer metadata.
|
|
15
|
+
6. Run `bunx brains-ops render <repo>`.
|
|
16
|
+
7. Run `bunx brains-ops ssh-key:bootstrap <repo> --push-to gh`.
|
|
17
|
+
8. Run `bunx brains-ops cert:bootstrap <repo> --push-to gh`.
|
|
18
|
+
9. Keep raw user secret material locally for now (`.env.local`, file-backed env vars, or equivalent local inputs), including `CONTENT_REPO_ADMIN_TOKEN` for operator onboarding.
|
|
19
|
+
10. Run `bunx brains-ops secrets:encrypt <repo> <handle>`.
|
|
20
|
+
11. Commit and push `users/<handle>.secrets.yaml.age`.
|
|
21
|
+
12. Run `bunx brains-ops onboard <repo> <handle>`.
|
|
22
|
+
13. Verify the deployed rover core contract:
|
|
13
23
|
- `https://<handle>.rizom.ai/health` returns `200`
|
|
14
24
|
- unauthenticated `POST https://<handle>.rizom.ai/mcp` returns `401`
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
25
|
+
14. For fleet upgrades, edit `pilot.yaml.brainVersion` and push once; CI rebuilds the shared image tag, refreshes generated user env files, and redeploys affected users.
|
|
26
|
+
15. Hand the Discord setup details to the user.
|
|
27
|
+
16. Hand over the browser defaults:
|
|
28
|
+
- Dashboard: `https://<handle>.rizom.ai/`
|
|
29
|
+
- CMS: `https://<handle>.rizom.ai/cms`
|
|
30
|
+
- GitHub token guidance for CMS access to the user's private content repo
|
|
31
|
+
17. If they need direct client access, also hand over the MCP connection details.
|
|
32
|
+
18. If you are also giving them a content repo workflow, describe it as optional and frame git/Obsidian as an advanced file-based path, not the default.
|
|
33
|
+
19. Send `docs/user-onboarding.md` to the user as the pilot handoff guide.
|
|
@@ -35,14 +35,21 @@ They are scaffolded from `@rizom/ops`, then versioned in this repo like any othe
|
|
|
35
35
|
|
|
36
36
|
## Bootstrap flow
|
|
37
37
|
|
|
38
|
+
For this fleet, operator-local secret material remains the source of truth during onboarding and rotation. The repo stores encrypted per-user secrets, not raw values.
|
|
39
|
+
|
|
38
40
|
For a new pilot user, the operator bootstrap order is:
|
|
39
41
|
|
|
40
|
-
1. `bunx brains-ops
|
|
41
|
-
2. `bunx brains-ops
|
|
42
|
-
3. `bunx brains-ops
|
|
43
|
-
4. `bunx brains-ops
|
|
42
|
+
1. `bunx brains-ops age-key:bootstrap <repo> --push-to gh`
|
|
43
|
+
2. `bunx brains-ops ssh-key:bootstrap <repo> --push-to gh`
|
|
44
|
+
3. `bunx brains-ops cert:bootstrap <repo> --push-to gh`
|
|
45
|
+
4. `bunx brains-ops secrets:encrypt <repo> <handle>`
|
|
46
|
+
5. `bunx brains-ops onboard <repo> <handle>`
|
|
47
|
+
|
|
48
|
+
`age-key:bootstrap` keeps a repo-local canonical age identity under `.brains-ops/age/identity.txt`, writes the matching public recipient to `pilot.yaml.agePublicKey`, and can push the private key to GitHub as `AGE_SECRET_KEY`.
|
|
49
|
+
|
|
50
|
+
The shared cert bootstrap writes local cert artifacts under `.brains-ops/certs/shared/`, which stays repo-local and ignored by git.
|
|
44
51
|
|
|
45
|
-
|
|
52
|
+
Preview hosts use the shape `<handle>-preview.rizom.ai`, so one wildcard origin cert for `*.rizom.ai` covers both the primary and preview hosts for every pilot user.
|
|
46
53
|
|
|
47
54
|
## Upgrading operator behavior
|
|
48
55
|
|
|
@@ -63,6 +70,37 @@ Use these checks after deploy:
|
|
|
63
70
|
- unauthenticated `POST https://<handle>.rizom.ai/mcp` should return `401 Unauthorized: Bearer token required`
|
|
64
71
|
- a bare `GET /` may also return `401`; that is expected for rover core and does not indicate a bad deploy
|
|
65
72
|
|
|
73
|
+
## Discord bot token checklist
|
|
74
|
+
|
|
75
|
+
Use this when enabling Discord for a pilot user.
|
|
76
|
+
|
|
77
|
+
1. Pick the user handle (for example `smoke`).
|
|
78
|
+
2. Open the Discord Developer Portal.
|
|
79
|
+
3. Create a **new application** for that user's rover.
|
|
80
|
+
4. Add a **Bot** to the application.
|
|
81
|
+
5. Copy the bot token.
|
|
82
|
+
6. Put that value in `.env` or `.env.local` in this repo as `DISCORD_BOT_TOKEN=...` while onboarding that user.
|
|
83
|
+
7. Keep `discord.enabled: true` in `users/<handle>.yaml` unless you explicitly want to disable the primary pilot interface.
|
|
84
|
+
8. Encrypt the current per-user secret payload:
|
|
85
|
+
- `bunx brains-ops secrets:encrypt . <handle>`
|
|
86
|
+
9. Reconcile/deploy the user or cohort:
|
|
87
|
+
|
|
88
|
+
- `bunx brains-ops onboard . <handle>`
|
|
89
|
+
- or `bunx brains-ops reconcile-cohort . <cohort>`
|
|
90
|
+
|
|
91
|
+
11. In the Discord Developer Portal, generate an install URL and invite the bot to the right server.
|
|
92
|
+
12. Send a test message in Discord and confirm the rover responds.
|
|
93
|
+
|
|
94
|
+
Notes:
|
|
95
|
+
|
|
96
|
+
- Use **one bot token per user/rover**.
|
|
97
|
+
- Do not reuse the same Discord bot token across multiple pilot users.
|
|
98
|
+
- Discord is the default pilot interface moving forward.
|
|
99
|
+
- The encrypted `users/<handle>.secrets.yaml.age` file is the durable checked-in deploy input; your local env is only the operator staging source.
|
|
100
|
+
- MCP is optional and mainly for direct client access or specific testing workflows.
|
|
101
|
+
- When explaining the content workflow, describe it first as a normal **git repo** of **markdown/text files**.
|
|
102
|
+
- Position **Obsidian** as optional: it is just one possible editor for those same files, not the default requirement.
|
|
103
|
+
|
|
66
104
|
## Recovery notes
|
|
67
105
|
|
|
68
106
|
Document known failure modes, recovery steps, and operator notes here.
|
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
Welcome to the Rover pilot.
|
|
4
4
|
|
|
5
|
-
This
|
|
5
|
+
This guide is written for **first-time 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,
|
|
11
|
+
In this pilot, the normal experience is:
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
- **
|
|
15
|
-
-
|
|
16
|
-
|
|
13
|
+
- **Discord** for chatting with Rover
|
|
14
|
+
- the **Dashboard** in your browser at `https://<handle>.rizom.ai/`
|
|
15
|
+
- the **CMS** in your browser at `https://<handle>.rizom.ai/cms`
|
|
16
|
+
|
|
17
|
+
Optional workflows exist too:
|
|
18
|
+
|
|
19
|
+
- **MCP** for direct client access from supported AI tools
|
|
20
|
+
- **git** if you want to work with the underlying files directly
|
|
21
|
+
- **Obsidian** if you want a nicer note-focused editor for those same files
|
|
17
22
|
|
|
18
23
|
You can think of Rover as a private knowledge companion that helps you:
|
|
19
24
|
|
|
@@ -23,46 +28,184 @@ You can think of Rover as a private knowledge companion that helps you:
|
|
|
23
28
|
- find patterns in what you have collected
|
|
24
29
|
- think through questions with AI
|
|
25
30
|
|
|
31
|
+
## The default mental model
|
|
32
|
+
|
|
33
|
+
If you remember only one thing, remember this:
|
|
34
|
+
|
|
35
|
+
- **Discord** = talk to Rover
|
|
36
|
+
- **Dashboard** = browser overview
|
|
37
|
+
- **CMS** = browser editing interface
|
|
38
|
+
- **MCP** = optional direct client integration
|
|
39
|
+
- **git / Obsidian** = optional file-based workflow
|
|
40
|
+
|
|
41
|
+
Most pilot users should start with the first three.
|
|
42
|
+
|
|
26
43
|
## What you will receive from us
|
|
27
44
|
|
|
28
|
-
We will send you the details you need to
|
|
45
|
+
We will send you the details you need to get started.
|
|
29
46
|
|
|
30
47
|
That usually includes:
|
|
31
48
|
|
|
32
|
-
-
|
|
33
|
-
- your **
|
|
34
|
-
-
|
|
49
|
+
- confirmation that Discord is enabled for you, plus the invite/setup steps
|
|
50
|
+
- your **Dashboard URL**: `https://<handle>.rizom.ai/`
|
|
51
|
+
- your **CMS URL**: `https://<handle>.rizom.ai/cms`
|
|
52
|
+
- if you will use the CMS, an invite to your **private** Rover content repo plus instructions for creating a GitHub token
|
|
53
|
+
- if needed, your Rover MCP URL: `https://<handle>.rizom.ai/mcp`
|
|
54
|
+
- if needed, your **Bearer token**
|
|
35
55
|
- any extra instructions if we are testing a specific workflow with your cohort
|
|
36
56
|
|
|
37
|
-
|
|
57
|
+
If we give you a **Bearer token**, treat it like a password. Do not share it.
|
|
58
|
+
|
|
59
|
+
## Start here: your first 5 minutes
|
|
60
|
+
|
|
61
|
+
For most users, the best first setup is:
|
|
38
62
|
|
|
39
|
-
|
|
63
|
+
1. join the Discord server we send you
|
|
64
|
+
2. open your Dashboard at `https://<handle>.rizom.ai/`
|
|
65
|
+
3. open the CMS at `https://<handle>.rizom.ai/cms`
|
|
66
|
+
4. when the CMS asks for GitHub access, use a fine-grained GitHub token with access to your private Rover content repo
|
|
67
|
+
5. send a first message in Discord and make one small edit in the CMS
|
|
68
|
+
|
|
69
|
+
A simple first chat message is:
|
|
70
|
+
|
|
71
|
+
> What can you help me do, and what should I use you for?
|
|
72
|
+
|
|
73
|
+
Or:
|
|
74
|
+
|
|
75
|
+
> Help me save my first note.
|
|
40
76
|
|
|
41
|
-
|
|
77
|
+
A simple first CMS action is:
|
|
78
|
+
|
|
79
|
+
- open the **Notes** collection
|
|
80
|
+
- create a short note about why you want to use Rover
|
|
81
|
+
- save it
|
|
82
|
+
|
|
83
|
+
If Discord is not enabled for you yet, tell us and we will share the right next step.
|
|
84
|
+
|
|
85
|
+
## One important idea: Discord + Dashboard + CMS are the default, MCP is optional
|
|
86
|
+
|
|
87
|
+
If you are new to Rover, the shortest explanation is:
|
|
42
88
|
|
|
43
89
|
- **Rover** is the assistant
|
|
44
|
-
- **
|
|
90
|
+
- **Discord** is the default chat interface
|
|
91
|
+
- the **Dashboard** is the default browser view
|
|
92
|
+
- the **CMS** is the default browser editing interface
|
|
93
|
+
- **MCP** is an optional direct connection method for supported AI clients
|
|
94
|
+
|
|
95
|
+
You do not need to understand the protocol details unless we specifically ask you to use MCP.
|
|
96
|
+
|
|
97
|
+
For most users, the practical meaning is simple:
|
|
98
|
+
|
|
99
|
+
- join Discord
|
|
100
|
+
- open your dashboard in the browser
|
|
101
|
+
- use the CMS when you want to edit structured content directly
|
|
102
|
+
- start using it
|
|
103
|
+
|
|
104
|
+
If your cohort is also testing MCP, we will send the URL, Bearer token, and setup help separately.
|
|
105
|
+
|
|
106
|
+
## Working in the CMS
|
|
107
|
+
|
|
108
|
+
The CMS is the easiest way to edit Rover content in the browser.
|
|
109
|
+
|
|
110
|
+
Use it when you want to:
|
|
111
|
+
|
|
112
|
+
- create notes without touching git directly
|
|
113
|
+
- edit existing content in a structured form
|
|
114
|
+
- browse your collections in one place
|
|
115
|
+
- make quick updates from the browser
|
|
116
|
+
|
|
117
|
+
### Why the CMS asks for GitHub access
|
|
118
|
+
|
|
119
|
+
Your Rover content lives in a **private GitHub repo**.
|
|
45
120
|
|
|
46
|
-
|
|
121
|
+
The CMS edits that repo for you.
|
|
47
122
|
|
|
48
|
-
|
|
123
|
+
That is why it asks for a **GitHub token**.
|
|
49
124
|
|
|
50
|
-
|
|
51
|
-
- add your Rover URL
|
|
52
|
-
- paste your Bearer token
|
|
53
|
-
- start talking to Rover
|
|
125
|
+
In practice, that means:
|
|
54
126
|
|
|
55
|
-
|
|
127
|
+
- you can use the CMS without cloning the repo locally
|
|
128
|
+
- your changes still go into your private content repo
|
|
129
|
+
- if you later open that repo with git or Obsidian, you are looking at the same underlying content
|
|
56
130
|
|
|
57
|
-
|
|
131
|
+
### What to expect the first time you open it
|
|
58
132
|
|
|
59
|
-
|
|
60
|
-
- **Obsidian** only if you also want to work directly with markdown files later
|
|
61
|
-
- **Discord** only if we explicitly enable it for you
|
|
133
|
+
When you open `https://<handle>.rizom.ai/cms`, you should expect something like this:
|
|
62
134
|
|
|
63
|
-
|
|
135
|
+
1. the CMS asks you to authenticate with GitHub
|
|
136
|
+
2. you enter the GitHub token we told you to create
|
|
137
|
+
3. the CMS loads your content collections
|
|
138
|
+
4. you can open an entry, edit it, and save your changes
|
|
64
139
|
|
|
65
|
-
|
|
140
|
+
If the CMS loads correctly, that is a good sign that:
|
|
141
|
+
|
|
142
|
+
- your browser access is working
|
|
143
|
+
- your repo access is working
|
|
144
|
+
- the token is working
|
|
145
|
+
|
|
146
|
+
### What you will see in the CMS
|
|
147
|
+
|
|
148
|
+
The exact collections may change over time, but a normal pilot setup includes collections for things like:
|
|
149
|
+
|
|
150
|
+
- **Notes**
|
|
151
|
+
- links or saved resources
|
|
152
|
+
- settings or other structured content
|
|
153
|
+
|
|
154
|
+
The important idea is not the exact list — it is that the CMS is the browser-based editor for your Rover content.
|
|
155
|
+
|
|
156
|
+
### A good first CMS task
|
|
157
|
+
|
|
158
|
+
A good first CMS task is to create a short note.
|
|
159
|
+
|
|
160
|
+
For example:
|
|
161
|
+
|
|
162
|
+
- open **Notes**
|
|
163
|
+
- create a new note
|
|
164
|
+
- title it something like `Why I’m using Rover`
|
|
165
|
+
- write 3 to 5 sentences
|
|
166
|
+
- save it
|
|
167
|
+
|
|
168
|
+
Then go back to Discord and ask Rover something like:
|
|
169
|
+
|
|
170
|
+
> What do you know about why I’m using Rover so far?
|
|
171
|
+
|
|
172
|
+
That connects the browser editing workflow with the chat workflow.
|
|
173
|
+
|
|
174
|
+
### When to use Discord vs CMS
|
|
175
|
+
|
|
176
|
+
A good rule of thumb is:
|
|
177
|
+
|
|
178
|
+
Use **Discord** when you want to:
|
|
179
|
+
|
|
180
|
+
- think out loud
|
|
181
|
+
- ask questions
|
|
182
|
+
- capture something quickly
|
|
183
|
+
- use Rover as a day-to-day assistant
|
|
184
|
+
|
|
185
|
+
Use the **CMS** when you want to:
|
|
186
|
+
|
|
187
|
+
- deliberately create or revise content
|
|
188
|
+
- browse existing entries
|
|
189
|
+
- make cleaner edits than you would in chat
|
|
190
|
+
- work in a more editor-like browser interface
|
|
191
|
+
|
|
192
|
+
Use both together. That is the default pilot workflow.
|
|
193
|
+
|
|
194
|
+
### If the CMS feels confusing
|
|
195
|
+
|
|
196
|
+
That is useful feedback.
|
|
197
|
+
|
|
198
|
+
Please tell us:
|
|
199
|
+
|
|
200
|
+
- what part was confusing
|
|
201
|
+
- whether the problem was authentication, navigation, editing, or saving
|
|
202
|
+
- what you expected to happen instead
|
|
203
|
+
|
|
204
|
+
We want to improve this workflow.
|
|
205
|
+
|
|
206
|
+
## Optional: direct MCP access
|
|
207
|
+
|
|
208
|
+
If we have asked you to use an MCP client, use one that supports:
|
|
66
209
|
|
|
67
210
|
- **HTTP / Streamable HTTP MCP**
|
|
68
211
|
- **Bearer token authentication**
|
|
@@ -77,9 +220,9 @@ If the client asks for a name, use something simple like:
|
|
|
77
220
|
|
|
78
221
|
- `Rover (<handle>)`
|
|
79
222
|
|
|
80
|
-
## Claude Desktop setup
|
|
223
|
+
## Optional: Claude Desktop setup
|
|
81
224
|
|
|
82
|
-
If
|
|
225
|
+
If we ask you to connect through Claude Desktop and your version supports a **remote HTTP / Streamable HTTP MCP server**, enter:
|
|
83
226
|
|
|
84
227
|
- **Server URL:** `https://<handle>.rizom.ai/mcp`
|
|
85
228
|
- **Authentication:** Bearer token
|
|
@@ -95,45 +238,108 @@ Or:
|
|
|
95
238
|
|
|
96
239
|
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.
|
|
97
240
|
|
|
98
|
-
##
|
|
241
|
+
## Optional: git, text files, and Obsidian
|
|
99
242
|
|
|
100
|
-
|
|
243
|
+
The underlying content workflow is still a normal **git repo** with normal **markdown/text files**.
|
|
101
244
|
|
|
102
|
-
|
|
245
|
+
But for this pilot, treat that as **optional**.
|
|
103
246
|
|
|
104
|
-
|
|
247
|
+
Use direct git or file-based workflows only if you want more control.
|
|
105
248
|
|
|
106
|
-
|
|
249
|
+
Obsidian is optional. It is just one possible editor for those files.
|
|
107
250
|
|
|
108
|
-
|
|
251
|
+
That means:
|
|
109
252
|
|
|
110
|
-
|
|
253
|
+
- use **Discord** as the main way to talk to Rover
|
|
254
|
+
- use the **Dashboard** and **CMS** as the normal browser workflow
|
|
255
|
+
- use a normal editor plus **git** only if you want to browse, draft, and edit your files directly
|
|
256
|
+
- use **Obsidian** only if you want a more note-focused interface for the same files
|
|
257
|
+
- Rover can pick up those file changes through the normal git-sync / directory-sync flow
|
|
111
258
|
|
|
112
|
-
|
|
259
|
+
### Important: your content repo is private
|
|
113
260
|
|
|
114
|
-
|
|
261
|
+
If you use the git/text-file workflow, you will be working in your own **private** GitHub repo.
|
|
115
262
|
|
|
116
|
-
|
|
263
|
+
That means:
|
|
117
264
|
|
|
118
|
-
|
|
265
|
+
- you do **not** need repo access just to use Rover in Discord
|
|
266
|
+
- you **do** need GitHub access if you want to clone, edit, and push to your content repo
|
|
267
|
+
- we will invite you only to **your own** content repo, not to the operator repo and not to other users' repos
|
|
119
268
|
|
|
120
|
-
###
|
|
269
|
+
### How you get access
|
|
121
270
|
|
|
122
|
-
|
|
271
|
+
If you want the git/text-file workflow, we will:
|
|
123
272
|
|
|
124
|
-
|
|
273
|
+
1. create or confirm your private content repo
|
|
274
|
+
2. invite your GitHub account to that repo
|
|
275
|
+
3. ask you to accept the GitHub invite
|
|
276
|
+
4. send you the repo URL
|
|
125
277
|
|
|
126
|
-
###
|
|
278
|
+
### Authentication options
|
|
127
279
|
|
|
128
|
-
|
|
280
|
+
To work with a private repo or the CMS, you need GitHub authentication.
|
|
129
281
|
|
|
130
|
-
|
|
282
|
+
Usually the easiest order is:
|
|
283
|
+
|
|
284
|
+
1. **GitHub sign-in** to accept the private repo invite
|
|
285
|
+
2. a **fine-grained personal access token** for the CMS, with access to your private Rover content repo
|
|
286
|
+
3. **GitHub Desktop** or normal git auth if you also want to clone the repo locally
|
|
287
|
+
4. **SSH key** only if you already use git that way
|
|
288
|
+
|
|
289
|
+
You do **not** need a GitHub token just to use Rover in Discord.
|
|
290
|
+
You do **not** need an MCP Bearer token unless we explicitly ask you to use MCP.
|
|
291
|
+
|
|
292
|
+
### If you want the local file workflow
|
|
293
|
+
|
|
294
|
+
If we have already shared your content repo workflow with you, the normal setup is:
|
|
295
|
+
|
|
296
|
+
1. clone your Rover content repo locally
|
|
297
|
+
2. edit the markdown/text files in your normal editor, or open that same folder as an Obsidian vault if you prefer
|
|
298
|
+
3. optionally install the **Obsidian Git** plugin if you want in-app commit/push/pull support
|
|
299
|
+
4. edit or organize your notes there
|
|
300
|
+
5. commit and push your changes through normal git, GitHub Desktop, or the Obsidian Git plugin
|
|
301
|
+
6. let the normal git-sync flow carry those changes into Rover
|
|
302
|
+
|
|
303
|
+
If we have **not** given you a direct content repo workflow yet, that is fine. You can ignore git, text files, and Obsidian for now and use Rover in Discord and the CMS. If we have also asked you to test MCP, you can use that too.
|
|
304
|
+
|
|
305
|
+
## Discord (default chat interface)
|
|
306
|
+
|
|
307
|
+
Discord is the default chat interface for this pilot.
|
|
308
|
+
|
|
309
|
+
Think of it as the main place to:
|
|
310
|
+
|
|
311
|
+
- save quick notes
|
|
312
|
+
- drop in links to save
|
|
313
|
+
- ask short or long questions
|
|
314
|
+
- use Rover day to day without setting up a separate client
|
|
315
|
+
|
|
316
|
+
Important:
|
|
317
|
+
|
|
318
|
+
- **Discord is the main pilot chat interface**
|
|
319
|
+
- the **Dashboard** and **CMS** are the main browser interfaces
|
|
320
|
+
- MCP is **optional**
|
|
321
|
+
- if Discord is enabled, we will send the exact invite/setup steps separately
|
|
322
|
+
- for some pilot setups, Discord-enabled users may need to supply their own bot token
|
|
323
|
+
|
|
324
|
+
If Discord is **not** enabled for you yet, ask us and we will tell you whether your cohort is on the Discord-first workflow.
|
|
325
|
+
|
|
326
|
+
## Dashboard basics
|
|
327
|
+
|
|
328
|
+
The Dashboard is the browser landing page for your Rover.
|
|
329
|
+
|
|
330
|
+
Use it when you want to:
|
|
331
|
+
|
|
332
|
+
- confirm the instance is up
|
|
333
|
+
- see the browser-side operator surface
|
|
334
|
+
- jump into the CMS quickly
|
|
335
|
+
|
|
336
|
+
This is not meant to be a public website. It is part of your Rover control surface.
|
|
131
337
|
|
|
132
338
|
## Wishlist: when Rover cannot do something yet
|
|
133
339
|
|
|
134
340
|
Rover has a built-in **wishlist**.
|
|
135
341
|
|
|
136
|
-
This
|
|
342
|
+
This matters because Rover will not be able to do everything yet.
|
|
137
343
|
|
|
138
344
|
If you ask for something Rover cannot do, it should add that request to the wishlist instead of just failing silently.
|
|
139
345
|
|
|
@@ -185,52 +391,6 @@ If Rover cannot do what you asked, a good response from Rover is something like:
|
|
|
185
391
|
|
|
186
392
|
If that does **not** happen, that is useful feedback for us too.
|
|
187
393
|
|
|
188
|
-
## Obsidian
|
|
189
|
-
|
|
190
|
-
Obsidian is part of the pilot through the **git-synced content repo workflow**, not through MCP.
|
|
191
|
-
|
|
192
|
-
That means:
|
|
193
|
-
|
|
194
|
-
- use **Claude Desktop** as the main way to talk to Rover
|
|
195
|
-
- use **Obsidian** if you want to browse, draft, and edit markdown files directly
|
|
196
|
-
- Rover can pick up those file changes through the normal git-sync / directory-sync flow
|
|
197
|
-
|
|
198
|
-
A simple mental model:
|
|
199
|
-
|
|
200
|
-
- **Claude Desktop** = talk to Rover
|
|
201
|
-
- **Obsidian** = edit the underlying notes
|
|
202
|
-
|
|
203
|
-
If we have already shared your content repo workflow with you, the simplest setup is:
|
|
204
|
-
|
|
205
|
-
1. clone your Rover content repo locally
|
|
206
|
-
2. open that folder as an Obsidian vault
|
|
207
|
-
3. optionally install the **Obsidian Git** plugin if you want in-app commit/push/pull support
|
|
208
|
-
4. edit or organize your markdown notes there
|
|
209
|
-
5. commit and push your changes through normal git or the Obsidian Git plugin
|
|
210
|
-
6. let the normal git-sync flow carry those changes into Rover
|
|
211
|
-
|
|
212
|
-
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.
|
|
213
|
-
|
|
214
|
-
## Discord (optional)
|
|
215
|
-
|
|
216
|
-
Discord is optional in this pilot.
|
|
217
|
-
|
|
218
|
-
If it is enabled for you, think of it as a lightweight secondary interface for:
|
|
219
|
-
|
|
220
|
-
- quick note capture
|
|
221
|
-
- dropping in links to save
|
|
222
|
-
- short questions when you do not want to open Claude Desktop
|
|
223
|
-
|
|
224
|
-
Important:
|
|
225
|
-
|
|
226
|
-
- **MCP remains the main interface**
|
|
227
|
-
- Discord is **off by default**
|
|
228
|
-
- if you want Discord, tell us explicitly
|
|
229
|
-
- for this pilot, Discord-enabled users may need to supply their own bot token
|
|
230
|
-
- if Discord is enabled, we will send the exact invite/setup steps separately
|
|
231
|
-
|
|
232
|
-
If Discord is **not** enabled for you, that is completely normal.
|
|
233
|
-
|
|
234
394
|
## What to expect in the pilot
|
|
235
395
|
|
|
236
396
|
This is a real working system, but it is still an early pilot.
|
|
@@ -250,18 +410,43 @@ That is normal. The point of the pilot is to learn from real use.
|
|
|
250
410
|
For the pilot:
|
|
251
411
|
|
|
252
412
|
- your Rover is deployed specifically for you
|
|
253
|
-
- access to `/mcp` is protected by your Bearer token
|
|
413
|
+
- if you are using MCP, access to `/mcp` is protected by your Bearer token
|
|
414
|
+
- your content repo is private
|
|
254
415
|
- you should avoid putting highly sensitive material into the pilot unless we have explicitly agreed that it is in scope
|
|
255
416
|
|
|
256
417
|
If you are unsure whether something belongs in Rover, ask us first.
|
|
257
418
|
|
|
258
419
|
## Troubleshooting
|
|
259
420
|
|
|
260
|
-
### I opened the domain and it does not look like a normal site
|
|
421
|
+
### I opened the domain and it does not look like a normal public site
|
|
422
|
+
|
|
423
|
+
That is expected. The root URL is your **Dashboard**, not a public website. The CMS lives at `/cms`. Rover also runs through Discord and, optionally, a direct MCP endpoint.
|
|
424
|
+
|
|
425
|
+
### The CMS asks for GitHub auth and I am not sure what to do
|
|
426
|
+
|
|
427
|
+
That is expected.
|
|
428
|
+
|
|
429
|
+
Use the GitHub token we told you to create for your **private Rover content repo**.
|
|
261
430
|
|
|
262
|
-
|
|
431
|
+
If you are missing one of these pieces, tell us:
|
|
263
432
|
|
|
264
|
-
|
|
433
|
+
- you did not get the repo invite
|
|
434
|
+
- you did not accept the repo invite yet
|
|
435
|
+
- you are not sure how to create the token
|
|
436
|
+
- the token was accepted but the CMS still does not load
|
|
437
|
+
|
|
438
|
+
### The CMS loads, but I am not sure whether my change worked
|
|
439
|
+
|
|
440
|
+
A good quick test is:
|
|
441
|
+
|
|
442
|
+
1. edit a short note in the CMS
|
|
443
|
+
2. save it
|
|
444
|
+
3. refresh the CMS and confirm the change is still there
|
|
445
|
+
4. ask Rover in Discord about that note
|
|
446
|
+
|
|
447
|
+
If anything in that loop feels unclear, tell us exactly where it became confusing.
|
|
448
|
+
|
|
449
|
+
### I got an authentication error in MCP
|
|
265
450
|
|
|
266
451
|
Usually this means one of three things:
|
|
267
452
|
|
|
@@ -291,6 +476,7 @@ If that happens, send us:
|
|
|
291
476
|
We especially want to hear:
|
|
292
477
|
|
|
293
478
|
- what was confusing during setup
|
|
479
|
+
- whether Discord, Dashboard, and CMS each made sense
|
|
294
480
|
- what felt useful immediately
|
|
295
481
|
- what felt weak, awkward, or unclear
|
|
296
482
|
- what you expected Rover to do but could not get it to do
|
|
@@ -303,10 +489,17 @@ Short, honest feedback is perfect.
|
|
|
303
489
|
When we onboard you, the message will look roughly like this:
|
|
304
490
|
|
|
305
491
|
```text
|
|
306
|
-
|
|
492
|
+
Discord enabled: yes/no
|
|
493
|
+
Discord setup: <invite link or setup steps>
|
|
494
|
+
Dashboard URL: https://<handle>.rizom.ai/
|
|
495
|
+
CMS URL: https://<handle>.rizom.ai/cms
|
|
496
|
+
CMS auth: GitHub token with access to your private Rover content repo
|
|
497
|
+
MCP access: optional / enabled / not enabled
|
|
498
|
+
|
|
499
|
+
If MCP is enabled:
|
|
500
|
+
MCP URL: https://<handle>.rizom.ai/mcp
|
|
307
501
|
Auth type: Bearer token
|
|
308
502
|
Bearer token: <token>
|
|
309
|
-
Discord enabled: yes/no
|
|
310
503
|
```
|
|
311
504
|
|
|
312
505
|
If anything is unclear, reply with the exact error text or a screenshot and we will help.
|
|
@@ -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
|