@descix/cli 1.0.17 → 1.0.19

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 (38) hide show
  1. package/agent-assets/guides/README.md +2 -1
  2. package/agent-assets/guides/dynamic-site-pattern.md +6 -10
  3. package/agent-assets/guides/knowledge-only-pattern.md +12 -11
  4. package/agent-assets/guides/microservice-pattern.md +13 -16
  5. package/agent-assets/guides/static-site-pattern.md +6 -7
  6. package/agent-assets/instructions/app-asset-validation.md +61 -59
  7. package/agent-assets/instructions/onboarding-flow.md +57 -74
  8. package/agent-assets/instructions/standard-folder-structure.md +39 -36
  9. package/agent-assets/reference/app-creation.md +27 -33
  10. package/agent-assets/reference/architecture.md +85 -148
  11. package/agent-assets/reference/local-dev.md +5 -83
  12. package/agent-assets/reference/mcp-integration.md +59 -49
  13. package/agent-assets/reference/workspace-config.md +9 -10
  14. package/bin/descix.js +20 -151
  15. package/lib/command-visibility.js +1 -1
  16. package/lib/commands/airdrop.js +6 -1
  17. package/lib/commands/init.js +2 -2
  18. package/lib/commands/kb-sync-surface.js +10 -0
  19. package/lib/commands/kb.js +1 -1
  20. package/lib/commands/microservice-auth-model.js +19 -0
  21. package/lib/commands/retired-verbs.js +106 -0
  22. package/lib/help-guard.js +85 -0
  23. package/lib/service-api-client.js +7 -6
  24. package/lib/verb-invokes.generated.json +0 -5
  25. package/lib/workspace-config.js +1 -1
  26. package/package.json +3 -3
  27. package/templates/agent-claude.md +6 -4
  28. package/templates/agent-cline.md +2 -2
  29. package/templates/agent-copilot.md +2 -2
  30. package/templates/agent-cursor.md +2 -2
  31. package/templates/scaffolds/microservice/SERVICE_README_sdk.md +6 -5
  32. package/templates/scaffolds/microservice/app.js +7 -3
  33. package/templates/scaffolds/microservice/defaults-config.json +2 -1
  34. package/templates/scaffolds/microservice/dev-overrides.example.json +2 -1
  35. package/templates/scaffolds/microservice/manifest.json +2 -1
  36. package/templates/scaffolds/microservice/package.json +2 -2
  37. package/templates/scaffolds/microservice/templates/SERVICE_README_TEMPLATE.md +3 -2
  38. package/lib/commands/retired-kb-sync.js +0 -112
@@ -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
@@ -87,7 +89,6 @@ execute_remote_command({
87
89
  This returns:
88
90
  - `communities`: Communities the user belongs to (with roles)
89
91
  - `apps`: Apps the user owns or can develop
90
- - `service_slots`: Available service deployment slots
91
92
 
92
93
  ### Step 2: Present Entitlements to User
93
94
 
@@ -139,20 +140,12 @@ Which mappings should I create?
139
140
 
140
141
  For each mapping, create appropriate config:
141
142
 
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
- }
143
+ 1. **workspace.json** (root level) — written by CLI verbs, never by hand:
144
+ ```bash
145
+ descix config init --env dev # creates workspace.json, pins env.apiUrl
146
+ descix app init -a {app_id} -c {community_id} -p {folder} # adds env.products[] entry
155
147
  ```
148
+ Each mapping becomes one `env.products[]` entry (`appId`, `communityId`, `localPath`, `kbId`).
156
149
 
157
150
  ## App Configuration Flow
158
151
 
@@ -180,10 +173,13 @@ Would you like to:
180
173
 
181
174
  For each folder being configured:
182
175
 
183
- 1. Read `packaging-types.md` for the decision tree
184
- 2. Read `folder-analysis.md` for detection heuristics
176
+ 1. Read [guides/README.md](../guides/README.md) for the decision tree (Knowledge-Only / Static
177
+ Site / Microservice / Dynamic Site)
178
+ 2. Read [app-asset-validation.md](./app-asset-validation.md#folder-analysis-heuristics) for
179
+ detection heuristics
185
180
  3. Present options to user with recommendations
186
- 4. Use appropriate template from `templates/{type}/`
181
+ 4. Scaffold with the matching CLI verb: `descix site init` and/or `descix microservice init`
182
+ (there is no `templates/{type}/` to read directly — the CLI copies the right scaffold)
187
183
 
188
184
  ### Step 4: Validate Folder Structure
189
185
 
@@ -191,12 +187,15 @@ After determining packaging type, ensure the folder follows the [Standard Folder
191
187
 
192
188
  ```
193
189
  {app_folder}/
194
- ├── assets/ # App identity (required)
195
- ├── kb/General/ # Knowledge base (required)
196
- ├── site/ # Static site (required)
197
- └── microservice/ # Backend service (required)
190
+ ├── assets/ # App identity (required)
191
+ ├── .descix/manifests/<KB>.json # Corpus manifest — required for RAG, see below
192
+ ├── site/ # Static site (required)
193
+ └── microservice/ # Backend service (required)
198
194
  ```
199
195
 
196
+ There is no required KB folder — a knowledge base is whatever git-tracked source(s) the corpus
197
+ manifest names.
198
+
200
199
  **Validation Steps:**
201
200
 
202
201
  1. Check if each required folder exists
@@ -204,54 +203,37 @@ After determining packaging type, ensure the folder follows the [Standard Folder
204
203
  3. Check if kb/ has a README.md
205
204
  4. For missing folders/files, offer to create with placeholders
206
205
 
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
- ```
206
+ `validate_app_structure` returns a generic checklist — a folder existing does not mean the KB is
207
+ wired up. **The check that actually matters for RAG is `.descix/manifests/<KB>.json` existing with
208
+ at least one source**, per [app-asset-validation.md](./app-asset-validation.md#step-3-check-knowledge-base).
215
209
 
216
210
  ### Step 5: Pull from Drive (Optional)
217
211
 
218
- If the app already exists remotely, offer to pull existing assets:
212
+ If the app already exists remotely, offer to pull existing content:
219
213
 
220
214
  ```
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
215
+ Your app may already have content on DeSciX Drive.
227
216
 
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]
217
+ Would you like me to pull it into your local folder?
218
+ [Yes, pull from Drive] [No, I'll create new ones]
232
219
  ```
233
220
 
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
- })
221
+ ```bash
222
+ descix drive pull -c <community_id> -a <app_id>
246
223
  ```
247
224
 
225
+ This downloads and converts Drive content to local markdown and reports what changed. It does not
226
+ sync to Pinecone by itself — follow with `descix kb corpus sync` once the pulled files are named
227
+ in a corpus manifest.
228
+
248
229
  ### Step 6: Create Missing Structure
249
230
 
250
231
  For any missing folders or files:
251
232
 
252
- 1. Create the folder structure
253
- 2. Add placeholder READMEs explaining purpose
254
- 3. Use templates from `templates/common/`
233
+ 1. Create `assets/` with starter `app_description.md` / `system_instructions.md` (or run
234
+ `descix app init`, which scaffolds these for you)
235
+ 2. Create a `.descix/manifests/<KB>.json` corpus manifest naming wherever the docs will live
236
+ 3. `descix site init` / `descix microservice init` for the code scaffolds
255
237
 
256
238
  ```
257
239
  Creating standard folder structure...
@@ -260,7 +242,7 @@ Created:
260
242
  ✓ assets/app_description.md (from template)
261
243
  ✓ assets/system_instructions.md (from template)
262
244
  ○ assets/icon.png (TODO: add a 512x512 PNG)
263
- ✓ kb/General/README.md
245
+ ✓ .descix/manifests/General.json (empty — add sources once you have docs)
264
246
  ✓ site/README.md (placeholder)
265
247
  ✓ microservice/README.md (placeholder)
266
248
 
@@ -307,7 +289,8 @@ Once configured, guide user to:
307
289
  ### Sync Commands (in order)
308
290
 
309
291
  1. **Sync app assets**: `descix app sync-assets`
310
- - Uploads app_description.md, icon.png, system_instructions.md to Drive
292
+ - Syncs app_description.md, icon.png, system_instructions.md to the platform (Firestore/GCS) —
293
+ not Google Drive
311
294
 
312
295
  2. **Sync knowledge base**: `descix kb corpus sync`
313
296
  - Indexes documents to Pinecone for RAG
@@ -315,14 +298,14 @@ Once configured, guide user to:
315
298
  3. **Deploy static site** (if applicable): `descix site upload`
316
299
  - Uploads site/ contents to GCS
317
300
 
318
- 4. **Register microservice** (if applicable): `descix microservice register`
319
- - Registers service with gateway
320
- - Run `descix microservice vectorize` for tell_me_how discovery
301
+ 4. **Register microservice** (if applicable): `descix microservice register -r SERVICE_README_<name>.md`
302
+ - Registers the service manifest AND vectorizes the README you pass, in one step —
303
+ `tell_me_how` discovery needs no separate developer action
321
304
 
322
305
  ### Ongoing Development
323
306
 
324
307
  - Use `tell_me_how` for tool discovery and guidance
325
- - Use `chat_with_kb` to test your AI agent
308
+ - Use `ask_question_to_app` (or `descix chat`) to test your AI agent
326
309
  - Use `validate_app_structure` before syncing to catch issues
327
310
 
328
311
  ---