@descix/cli 1.0.17 → 1.0.18

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.
@@ -44,7 +44,8 @@ Does the user need a public website?
44
44
  ### Microservice
45
45
  - Backend service with MCP-exposed commands
46
46
  - Add `microservice/` folder with `descix microservice init`
47
- - Commands: `descix microservice register/vectorize`
47
+ - Commands: `descix microservice register -r SERVICE_README.md` (registration also vectorizes the
48
+ README for `tell_me_how` discovery — there is no separate developer step)
48
49
 
49
50
  ### Dynamic Site
50
51
  - SSR app where microservice serves the site
@@ -24,12 +24,8 @@ my-dynamic-app/
24
24
  │ ├── app_description.md
25
25
  │ ├── icon.png
26
26
  │ └── system_instructions.md
27
- ├── kb/
28
- │ ├── staging/
29
- │ ├── General/
30
- │ │ ├── README.md
31
- │ │ └── user-guide.md
32
- │ └── chunks/
27
+ ├── docs/ # Your RAG content — any location works
28
+ │ └── user-guide.md # named in a corpus manifest (.descix/manifests/General.json)
33
29
  ├── site/
34
30
  │ └── README.md # "Site served by microservice"
35
31
  ├── microservice/
@@ -85,9 +81,9 @@ descix microservice init
85
81
  # 2. Add SSR routes to your service, run it locally behind the gateway
86
82
  descix serve
87
83
 
88
- # 3. Register and vectorize (after the service is deployed — see Deployment)
89
- descix microservice register
90
- descix microservice vectorize
84
+ # 3. Register (after the service is deployed — see Deployment). This also vectorizes the
85
+ # README you pass with -r, so tell_me_how can discover the service's tools.
86
+ descix microservice register -r SERVICE_README_myapp.md
91
87
 
92
88
  # 4. Sync KB
93
89
  descix kb corpus sync -c <community> -a <app>
@@ -98,7 +94,7 @@ descix kb corpus sync -c <community> -a <app>
98
94
  | Capability | Enabled |
99
95
  |------------|---------|
100
96
  | RAG search | Yes |
101
- | chat_with_kb | Yes |
97
+ | RAG chat (`ask_question_to_app`) | Yes |
102
98
  | Public URL | Yes |
103
99
  | MCP tools | Yes |
104
100
  | tell_me_how discovery | Yes |
@@ -23,18 +23,19 @@ my-docs/
23
23
  │ ├── app_description.md # Required
24
24
  │ ├── icon.png # Required (512x512)
25
25
  │ └── system_instructions.md # Required
26
- └── kb/
27
- ├── staging/ # New files to push
28
- ├── General/ # Text-converted content
29
- │ ├── README.md
30
- │ ├── getting-started.md
31
- │ ├── api-reference.md
32
- │ └── tutorials/
33
- │ └── ...
34
- └── chunks/ # Processed chunks (JSON)
26
+ ├── docs/ # Your content — any location works
27
+ │ ├── getting-started.md
28
+ │ ├── api-reference.md
29
+ │ └── tutorials/
30
+ │ └── ...
31
+ └── .descix/
32
+ └── manifests/
33
+ └── General.json # Corpus manifest — names the docs source(s) above
35
34
  ```
36
35
 
37
- **Note:** No `site/` or `microservice/` folders needed.
36
+ **Note:** No `site/` or `microservice/` folders needed. There is no required KB folder — the
37
+ corpus manifest names whichever git-tracked directory holds your docs (`docs/` above is just an
38
+ example; `kb/General/` also works if that's where content ends up, e.g. from `descix drive pull`).
38
39
 
39
40
  ## Configuration (`workspace.json`)
40
41
 
@@ -76,7 +77,7 @@ The git path needs no Drive at all: commit markdown, name it in the manifest, ru
76
77
  | Capability | Enabled |
77
78
  |------------|---------|
78
79
  | RAG search | Yes |
79
- | chat_with_kb | Yes |
80
+ | RAG chat (`ask_question_to_app`) | Yes |
80
81
  | Public URL | No |
81
82
  | MCP tools | No |
82
83
  | tell_me_how discovery | No |
@@ -24,12 +24,9 @@ my-service/
24
24
  │ ├── app_description.md
25
25
  │ ├── icon.png
26
26
  │ └── system_instructions.md
27
- ├── kb/
28
- │ ├── staging/
29
- │ ├── General/
30
- │ │ ├── README.md
31
- │ │ └── api-reference.md
32
- │ └── chunks/
27
+ ├── .descix/
28
+ │ └── manifests/
29
+ │ └── General.json # Corpus manifest — names the docs `kb corpus sync` publishes
33
30
  ├── site/ # Optional frontend
34
31
  │ └── ...
35
32
  ├── microservice/
@@ -72,7 +69,7 @@ infrastructure for free, and a service that hand-rolls its own config or reads
72
69
  only shows up later, in the environment where it matters.
73
70
 
74
71
  **This is also why your service is called at its own Cloud Run instance rather than
75
- through an extra hop at the DeSciX router** (CEO-D-2026-08-21-DIRECT-MICROSERVICE-ROUTING-IS-DESIGN).
72
+ through an extra hop at the DeSciX router** — direct routing is by design.
76
73
  Direct routing is the intended path *because* a service built on the SDK already carries
77
74
  the infrastructure the extra hop would otherwise have to add. Read a direct call as the
78
75
  architecture working, not as a bypass — the correctness precondition is that the service
@@ -110,19 +107,19 @@ descix microservice init
110
107
 
111
108
  # 2. Implement your commands in commandHandlers/
112
109
 
113
- # 3. Publish the service MANIFEST so its commands are discoverable
114
- descix microservice register
110
+ # 3. Publish the service MANIFEST and vectorize its SERVICE_README in one step
111
+ descix microservice register -r SERVICE_README_myapp.md
115
112
 
116
- # 4. Vectorize SERVICE_README for discovery
117
- descix microservice vectorize
118
-
119
- # 5. Sync KB
113
+ # 4. Sync KB
120
114
  descix kb corpus sync -c <community> -a <app>
121
115
  ```
122
116
 
123
117
  **What registration is, and is not.** It publishes your `manifest.json` — the command list —
124
- so `tell_me_how` can discover your tools. `scripts/register.js` writes that manifest and logs
125
- the commands it published. It is a DISCOVERY step.
118
+ and vectorizes the README you pass with `-r`, so `tell_me_how` can discover your tools.
119
+ `scripts/register.js` writes that manifest and logs the commands it published. There is no
120
+ separate developer-facing vectorize step — `descix microservice vectorize` exists but is an
121
+ admin-only utility (for re-vectorizing without re-registering), not part of the normal flow.
122
+ It is a DISCOVERY step.
126
123
 
127
124
  It is not how your service becomes reachable, and nothing here asks you to declare a route or
128
125
  a URL. Do not read this step as wiring up addressing.
@@ -132,7 +129,7 @@ a URL. Do not read this step as wiring up addressing.
132
129
  | Capability | Enabled |
133
130
  |------------|---------|
134
131
  | RAG search | Yes |
135
- | chat_with_kb | Yes |
132
+ | RAG chat (`ask_question_to_app`) | Yes |
136
133
  | Public URL | Yes (via service) |
137
134
  | MCP tools | Yes |
138
135
  | tell_me_how discovery | Yes |
@@ -24,12 +24,8 @@ my-site/
24
24
  │ ├── app_description.md
25
25
  │ ├── icon.png
26
26
  │ └── system_instructions.md
27
- ├── kb/
28
- │ ├── staging/
29
- │ ├── General/
30
- │ │ ├── README.md
31
- │ │ └── ... (markdown for RAG)
32
- │ └── chunks/
27
+ ├── docs/ # Your RAG content — any location works
28
+ │ └── ... (markdown, named in a corpus manifest)
33
29
  ├── site/ # Static files to deploy
34
30
  │ ├── index.html
35
31
  │ ├── styles.css
@@ -39,6 +35,9 @@ my-site/
39
35
  │ └── dist/ # Build output (if using bundler)
40
36
  ├── src/ # Source files (not deployed)
41
37
  │ └── ...
38
+ ├── .descix/
39
+ │ └── manifests/
40
+ │ └── General.json # Corpus manifest — names docs/ as the sync source
42
41
  ├── package.json
43
42
  └── vite.config.js
44
43
  ```
@@ -79,7 +78,7 @@ descix site upload
79
78
  | Capability | Enabled |
80
79
  |------------|---------|
81
80
  | RAG search | Yes |
82
- | chat_with_kb | Yes |
81
+ | RAG chat (`ask_question_to_app`) | Yes |
83
82
  | Public URL | Yes |
84
83
  | MCP tools | No |
85
84
  | tell_me_how discovery | No |
@@ -6,17 +6,20 @@ This document guides the AI agent through validating an app's folder structure a
6
6
 
7
7
  ### Step 1: Check Folder Structure
8
8
 
9
- Verify these folders exist:
9
+ Verify these exist:
10
10
 
11
11
  ```
12
12
  {app_folder}/
13
- ├── assets/ # Required
14
- ├── kb/ # Required
15
- │ └── General/ # Required (default KB)
16
- ├── site/ # Required (even if placeholder)
17
- └── microservice/ # Required (even if placeholder)
13
+ ├── assets/ # Required
14
+ ├── .descix/manifests/<KB>.json # Required — the corpus manifest (see Step 3)
15
+ ├── site/ # Required (even if placeholder)
16
+ └── microservice/ # Required (even if placeholder)
18
17
  ```
19
18
 
19
+ There is no required KB folder. A knowledge base is whatever git-tracked source(s) the corpus
20
+ manifest names — `kb/General/` is one common convention (especially if the app also uses `descix
21
+ drive pull`), but any path works.
22
+
20
23
  **If folders are missing**, offer to create them with appropriate placeholder content.
21
24
 
22
25
  ### Step 2: Check Required Assets
@@ -76,33 +79,48 @@ I can create a starter template based on your app description.
76
79
 
77
80
  ### Step 3: Check Knowledge Base
78
81
 
79
- #### `kb/General/README.md`
82
+ #### `.descix/manifests/<KB>.json`
83
+
84
+ **Check**: A corpus manifest exists at `{app_folder}/.descix/manifests/<KB-name>.json` (default KB
85
+ name is `General`) and its `sources` array names at least one git-tracked path.
80
86
 
81
- **Check**: File exists with overview content
87
+ **This is the real check** — the manifest is what `descix kb corpus sync` reads. There is no
88
+ folder-existence check to run instead of it: a `kb/General/` folder with files in it does nothing
89
+ for RAG until a manifest names it.
82
90
 
83
- **If missing**, create from app_description or guide:
91
+ **If missing**, guide the user:
84
92
 
85
93
  ```
86
- Your knowledge base needs a README. This is the first document
87
- the AI will reference when answering questions.
94
+ Your app doesn't have a knowledge base manifest yet. This file
95
+ (.descix/manifests/General.json) tells `descix kb corpus sync` which
96
+ of your git-tracked files to index for RAG.
88
97
 
89
- I can create one based on your app description, or you can
90
- provide specific content for the overview.
98
+ Minimal shape:
99
+ {
100
+ "kb_name": "General",
101
+ "sync_mode": "local",
102
+ "sources": [
103
+ { "path": "docs", "ref": "main", "tier": 1, "doc_type": "documentation" }
104
+ ]
105
+ }
106
+
107
+ Which folder(s) in your repo should I name as sources?
91
108
  ```
92
109
 
93
- #### KB Content
110
+ #### Manifest Sources
94
111
 
95
- **Check**: At least one documentation file in `kb/General/`
112
+ **Check**: `descix kb corpus status -a <app_id> -k <KB>` reports at least one tracked file (or run
113
+ `descix kb corpus sync --dry-run --show-walk` to preview the walk before syncing).
96
114
 
97
115
  **If empty**, suggest:
98
116
 
99
117
  ```
100
- Your knowledge base is empty. The AI can only answer questions
101
- based on content in kb/General/.
118
+ Your knowledge base manifest has no sources yet (or its sources walk to zero files).
119
+ The AI can only answer questions based on content the manifest names.
102
120
 
103
121
  Suggestions:
104
- - Move existing documentation here
105
- - Create a getting-started.md
122
+ - Point a source at existing documentation
123
+ - Create a getting-started.md and name its folder
106
124
  - Add API reference docs
107
125
  - Include user guides
108
126
  ```
@@ -160,49 +178,31 @@ This app does not have a backend microservice.
160
178
 
161
179
  ## Pull from Drive Workflow
162
180
 
163
- If the app already exists on Drive, offer to pull existing assets.
164
-
165
- ### Check if App Exists Remotely
166
-
167
- ```
168
- Use: validate_app_assets({ community_id, app_id, check_drive: true })
169
-
170
- Returns:
171
- {
172
- "local_assets": { ... },
173
- "remote_assets": { ... },
174
- "missing_locally": ["icon.png", "system_instructions.md"],
175
- "can_pull": true
176
- }
177
- ```
181
+ If the app already exists on Drive (Drive-mode authoring), offer to pull existing content.
182
+ **There is no dedicated "check what's on Drive" command** — the canonical tool is `descix drive
183
+ pull` itself, which downloads and converts in one step (nothing to plan around a separate check
184
+ command that doesn't exist).
178
185
 
179
186
  ### Offer to Pull
180
187
 
181
188
  ```
182
- I found your app already exists on DeSciX Drive with these assets:
183
- - ✓ app_description.md (234 bytes)
184
- - ✓ icon.png (45KB)
185
- - ✓ system_instructions.md (1.2KB)
189
+ Your app may already have content on DeSciX Drive.
186
190
 
187
- Your local folder is missing:
188
- - icon.png
189
- - system_instructions.md
190
-
191
- Would you like me to pull these from Drive to your local folder?
192
- [Yes, pull missing assets] [No, I'll create new ones]
191
+ Would you like me to pull it into your local folder?
192
+ [Yes, pull from Drive] [No, I'll create new ones]
193
193
  ```
194
194
 
195
195
  ### Execute Pull
196
196
 
197
- ```
198
- Use: pull_app_assets_from_drive({
199
- community_id,
200
- app_id,
201
- local_path,
202
- folders: ["assets", "kb"] // Optional: specify which folders
203
- })
197
+ ```bash
198
+ descix drive pull -c <community_id> -a <app_id>
204
199
  ```
205
200
 
201
+ This downloads and converts Drive content to local markdown (default KB `General`; pass `-k
202
+ <name>` for another) and reports what it pulled, converted, skipped or left unchanged. Follow up
203
+ with `descix kb corpus sync -a <app_id>` once the pulled files are named in a corpus manifest —
204
+ `descix drive pull` never syncs to Pinecone by itself.
205
+
206
206
  ## Validation Results Format
207
207
 
208
208
  After validation, report status clearly:
@@ -212,7 +212,7 @@ After validation, report status clearly:
212
212
 
213
213
  ### Folder Structure
214
214
  ✓ assets/ exists
215
- ✓ kb/General/ exists
215
+ ✓ .descix/manifests/General.json exists
216
216
  ✓ site/ exists
217
217
  ✓ microservice/ exists
218
218
 
@@ -222,8 +222,8 @@ After validation, report status clearly:
222
222
  ✓ assets/system_instructions.md (1.2KB)
223
223
 
224
224
  ### Knowledge Base
225
- ✓ kb/General/README.md exists
226
- ✓ 5 documents found (12.4KB total)
225
+ ✓ .descix/manifests/General.json names 1 source
226
+ ✓ 5 documents tracked (`descix kb corpus status -a my-app -k General`)
227
227
 
228
228
  ### Site
229
229
  ○ site/ contains placeholder only (no UI)
@@ -303,7 +303,9 @@ Do NOT:
303
303
  {Describe the desired tone: professional, friendly, technical, etc.}
304
304
  ```
305
305
 
306
- ### kb/README.md Template
306
+ ### KB Overview Doc Template
307
+
308
+ Place this wherever your corpus manifest points (e.g. `docs/README.md`):
307
309
 
308
310
  ```markdown
309
311
  # {App Name} Knowledge Base
@@ -376,10 +378,10 @@ Always run validation:
376
378
 
377
379
  ### Before `descix kb corpus sync`
378
380
 
379
- 1. Check `kb/General/` exists
380
- 2. Verify at least one document exists
381
- 3. Warn if no README.md
382
- 4. Report total document count and size
381
+ 1. Check `.descix/manifests/<KB>.json` exists
382
+ 2. Run `--dry-run --show-walk` and confirm the manifest's sources resolve to at least one file
383
+ 3. Warn if no overview doc is named among the sources
384
+ 4. Report total document count from the dry-run output
383
385
 
384
386
  ### Before `descix site upload`
385
387
 
@@ -16,26 +16,28 @@ Purpose: Maps local folders to DeSciX apps and stores all configuration.
16
16
 
17
17
  ```json
18
18
  {
19
- "version": "2.0",
20
- "primaryCommunity": "daita",
21
- "communities": {
22
- "daita": {
23
- "apps": {
24
- "appsdk": {
25
- "localPath": "daita/appsdk",
26
- "absolutePath": "/path/to/workspace/daita/appsdk",
27
- "kbId": "General"
28
- }
19
+ "version": "2.1",
20
+ "env": {
21
+ "environment": "DEV",
22
+ "apiUrl": "https://dev.descix.net",
23
+ "products": [
24
+ {
25
+ "appId": "daita-appsdk",
26
+ "communityId": "daita",
27
+ "localPath": "daita/appsdk",
28
+ "kbId": "General"
29
29
  }
30
- }
30
+ ]
31
31
  },
32
32
  "driveConfig": {
33
- "base_folder_id": "...",
34
- "base_folder_name": "..."
33
+ "base_folder_id": "..."
35
34
  }
36
35
  }
37
36
  ```
38
37
 
38
+ A `communities`-keyed block with no `env` block is the removed v1 shape — the loader refuses it:
39
+ `v1 workspace format is not supported. Migrate to v2.1.`
40
+
39
41
  **Used for:**
40
42
  - CLI auto-detection of community/app from current directory
41
43
  - `tell_me_how --scope project` to discover project-specific tools
@@ -139,20 +141,12 @@ Which mappings should I create?
139
141
 
140
142
  For each mapping, create appropriate config:
141
143
 
142
- 1. **workspace.json** (root level):
143
- ```json
144
- {
145
- "version": "2.0",
146
- "primaryCommunity": "{primary_community_id}",
147
- "directoryMappings": {
148
- "{folder}": {
149
- "communityId": "{community_id}",
150
- "appId": "{app_id}",
151
- "kbId": "General"
152
- }
153
- }
154
- }
144
+ 1. **workspace.json** (root level) — written by CLI verbs, never by hand:
145
+ ```bash
146
+ descix config init --env dev # creates workspace.json, pins env.apiUrl
147
+ descix app init -a {app_id} -c {community_id} -p {folder} # adds env.products[] entry
155
148
  ```
149
+ Each mapping becomes one `env.products[]` entry (`appId`, `communityId`, `localPath`, `kbId`).
156
150
 
157
151
  ## App Configuration Flow
158
152
 
@@ -180,10 +174,13 @@ Would you like to:
180
174
 
181
175
  For each folder being configured:
182
176
 
183
- 1. Read `packaging-types.md` for the decision tree
184
- 2. Read `folder-analysis.md` for detection heuristics
177
+ 1. Read [guides/README.md](../guides/README.md) for the decision tree (Knowledge-Only / Static
178
+ Site / Microservice / Dynamic Site)
179
+ 2. Read [app-asset-validation.md](./app-asset-validation.md#folder-analysis-heuristics) for
180
+ detection heuristics
185
181
  3. Present options to user with recommendations
186
- 4. Use appropriate template from `templates/{type}/`
182
+ 4. Scaffold with the matching CLI verb: `descix site init` and/or `descix microservice init`
183
+ (there is no `templates/{type}/` to read directly — the CLI copies the right scaffold)
187
184
 
188
185
  ### Step 4: Validate Folder Structure
189
186
 
@@ -191,12 +188,15 @@ After determining packaging type, ensure the folder follows the [Standard Folder
191
188
 
192
189
  ```
193
190
  {app_folder}/
194
- ├── assets/ # App identity (required)
195
- ├── kb/General/ # Knowledge base (required)
196
- ├── site/ # Static site (required)
197
- └── microservice/ # Backend service (required)
191
+ ├── assets/ # App identity (required)
192
+ ├── .descix/manifests/<KB>.json # Corpus manifest — required for RAG, see below
193
+ ├── site/ # Static site (required)
194
+ └── microservice/ # Backend service (required)
198
195
  ```
199
196
 
197
+ There is no required KB folder — a knowledge base is whatever git-tracked source(s) the corpus
198
+ manifest names.
199
+
200
200
  **Validation Steps:**
201
201
 
202
202
  1. Check if each required folder exists
@@ -204,54 +204,37 @@ After determining packaging type, ensure the folder follows the [Standard Folder
204
204
  3. Check if kb/ has a README.md
205
205
  4. For missing folders/files, offer to create with placeholders
206
206
 
207
- Use `validate_app_structure` command:
208
-
209
- ```javascript
210
- execute_remote_command({
211
- command: "validate_app_structure",
212
- params: { local_path: "/path/to/app" }
213
- })
214
- ```
207
+ `validate_app_structure` returns a generic checklist — a folder existing does not mean the KB is
208
+ wired up. **The check that actually matters for RAG is `.descix/manifests/<KB>.json` existing with
209
+ at least one source**, per [app-asset-validation.md](./app-asset-validation.md#step-3-check-knowledge-base).
215
210
 
216
211
  ### Step 5: Pull from Drive (Optional)
217
212
 
218
- If the app already exists remotely, offer to pull existing assets:
213
+ If the app already exists remotely, offer to pull existing content:
219
214
 
220
215
  ```
221
- I notice this app ({community_id}/{app_id}) already exists on DeSciX.
222
-
223
- Remote assets found:
224
- - ✓ app_description.md
225
- - ✓ icon.png
226
- - ✓ system_instructions.md
216
+ Your app may already have content on DeSciX Drive.
227
217
 
228
- Your local folder is missing some of these.
229
-
230
- Would you like me to pull them from Drive?
231
- [Yes, pull missing assets] [No, I'll create new ones]
218
+ Would you like me to pull it into your local folder?
219
+ [Yes, pull from Drive] [No, I'll create new ones]
232
220
  ```
233
221
 
234
- Use `pull_app_assets_from_drive` command:
235
-
236
- ```javascript
237
- execute_remote_command({
238
- command: "pull_app_assets_from_drive",
239
- params: {
240
- community_id: "...",
241
- app_id: "...",
242
- local_path: "/path/to/app",
243
- folders: ["assets", "kb"] // Which folders to pull
244
- }
245
- })
222
+ ```bash
223
+ descix drive pull -c <community_id> -a <app_id>
246
224
  ```
247
225
 
226
+ This downloads and converts Drive content to local markdown and reports what changed. It does not
227
+ sync to Pinecone by itself — follow with `descix kb corpus sync` once the pulled files are named
228
+ in a corpus manifest.
229
+
248
230
  ### Step 6: Create Missing Structure
249
231
 
250
232
  For any missing folders or files:
251
233
 
252
- 1. Create the folder structure
253
- 2. Add placeholder READMEs explaining purpose
254
- 3. Use templates from `templates/common/`
234
+ 1. Create `assets/` with starter `app_description.md` / `system_instructions.md` (or run
235
+ `descix app init`, which scaffolds these for you)
236
+ 2. Create a `.descix/manifests/<KB>.json` corpus manifest naming wherever the docs will live
237
+ 3. `descix site init` / `descix microservice init` for the code scaffolds
255
238
 
256
239
  ```
257
240
  Creating standard folder structure...
@@ -260,7 +243,7 @@ Created:
260
243
  ✓ assets/app_description.md (from template)
261
244
  ✓ assets/system_instructions.md (from template)
262
245
  ○ assets/icon.png (TODO: add a 512x512 PNG)
263
- ✓ kb/General/README.md
246
+ ✓ .descix/manifests/General.json (empty — add sources once you have docs)
264
247
  ✓ site/README.md (placeholder)
265
248
  ✓ microservice/README.md (placeholder)
266
249
 
@@ -307,7 +290,8 @@ Once configured, guide user to:
307
290
  ### Sync Commands (in order)
308
291
 
309
292
  1. **Sync app assets**: `descix app sync-assets`
310
- - Uploads app_description.md, icon.png, system_instructions.md to Drive
293
+ - Syncs app_description.md, icon.png, system_instructions.md to the platform (Firestore/GCS) —
294
+ not Google Drive
311
295
 
312
296
  2. **Sync knowledge base**: `descix kb corpus sync`
313
297
  - Indexes documents to Pinecone for RAG
@@ -315,14 +299,14 @@ Once configured, guide user to:
315
299
  3. **Deploy static site** (if applicable): `descix site upload`
316
300
  - Uploads site/ contents to GCS
317
301
 
318
- 4. **Register microservice** (if applicable): `descix microservice register`
319
- - Registers service with gateway
320
- - Run `descix microservice vectorize` for tell_me_how discovery
302
+ 4. **Register microservice** (if applicable): `descix microservice register -r SERVICE_README_<name>.md`
303
+ - Registers the service manifest AND vectorizes the README you pass, in one step —
304
+ `tell_me_how` discovery needs no separate developer action
321
305
 
322
306
  ### Ongoing Development
323
307
 
324
308
  - Use `tell_me_how` for tool discovery and guidance
325
- - Use `chat_with_kb` to test your AI agent
309
+ - Use `ask_question_to_app` (or `descix chat`) to test your AI agent
326
310
  - Use `validate_app_structure` before syncing to catch issues
327
311
 
328
312
  ---