@notis_ai/cli 0.2.0-beta.156.1 → 0.2.0-beta.158.1

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 (69) hide show
  1. package/README.md +11 -45
  2. package/config/notis_app_design_rules.json +135 -0
  3. package/dist/agent-hooks/notis-agent-hook.mjs +8893 -10612
  4. package/dist/base-skills/notis-apps/SKILL.md +25 -573
  5. package/dist/base-skills/notis-apps/references/architecture.md +147 -0
  6. package/dist/base-skills/notis-apps/references/design.md +154 -0
  7. package/dist/base-skills/notis-apps/references/release.md +93 -0
  8. package/dist/base-skills/notis-apps/references/sdk.md +60 -0
  9. package/dist/base-skills/notis-apps/references/troubleshooting.md +26 -0
  10. package/dist/base-skills/notis-cli/SKILL.md +19 -267
  11. package/dist/base-skills/notis-cli/references/app-delivery.md +18 -0
  12. package/dist/base-skills/notis-cli/references/native-databases.md +20 -0
  13. package/dist/base-skills/notis-cli/references/tool-examples.md +56 -0
  14. package/dist/base-skills/notis-cli/references/troubleshooting.md +39 -0
  15. package/dist/base-skills/notis-query/SKILL.md +13 -651
  16. package/dist/base-skills/notis-query/references/database-discovery.md +59 -0
  17. package/dist/base-skills/notis-query/references/documents.md +50 -0
  18. package/dist/base-skills/notis-query/references/query.md +543 -0
  19. package/dist/skill-sync/index.js +24 -7
  20. package/dist/skill-sync/index.js.map +4 -4
  21. package/dist/skill-sync-worker.mjs +2989 -0
  22. package/package.json +1 -2
  23. package/skills/notis-apps/cli.md +34 -95
  24. package/skills/notis-cli/AGENT_INSTRUCTIONS.md +1 -1
  25. package/src/cli.js +4 -0
  26. package/src/command-specs/apps.js +322 -1560
  27. package/src/command-specs/diagnostics.js +37 -0
  28. package/src/command-specs/skills.js +23 -5
  29. package/src/runtime/agent-browser.js +169 -1
  30. package/src/runtime/app-boundary-validator.js +221 -0
  31. package/src/runtime/app-platform.js +359 -233
  32. package/src/runtime/app-test-server.js +292 -0
  33. package/src/runtime/profiles.js +5 -2
  34. package/src/runtime/skill-sync/cloud-client.ts +2 -1
  35. package/src/runtime/skill-sync/index.ts +24 -6
  36. package/src/runtime/skill-sync/types.ts +2 -0
  37. package/src/runtime/skill-sync-service.js +109 -0
  38. package/src/skill-sync-worker-entry.js +2 -0
  39. package/src/skill-sync-worker.js +50 -0
  40. package/template/app/page.tsx +45 -44
  41. package/template/components/page-heading.tsx +23 -0
  42. package/template/components/ui/badge.tsx +7 -4
  43. package/template/components/ui/card.tsx +24 -11
  44. package/template/components/ui/native-select.tsx +24 -0
  45. package/template/notis.config.ts +0 -1
  46. package/template/package.json +2 -2
  47. package/template/packages/sdk/package.json +1 -2
  48. package/template/packages/sdk/src/components/MultiSelectActionBar.tsx +55 -13
  49. package/template/packages/sdk/src/components/MultiSelectCheckbox.tsx +3 -1
  50. package/template/packages/sdk/src/config.ts +0 -2
  51. package/template/packages/sdk/src/hooks/useCollectionInteractions.ts +138 -28
  52. package/template/packages/sdk/src/hooks/useLongPressSelection.ts +79 -0
  53. package/template/packages/sdk/src/hooks/useMultiSelect.ts +2 -8
  54. package/template/packages/sdk/src/index.ts +3 -0
  55. package/template/packages/sdk/src/interactions/actions.ts +14 -1
  56. package/template/packages/sdk/src/interactions/shortcuts.tsx +79 -19
  57. package/template/packages/sdk/src/interactions/visibility.ts +13 -0
  58. package/template/packages/sdk/src/interactions.ts +5 -1
  59. package/template/packages/sdk/src/styles.css +28 -1
  60. package/src/runtime/app-dev-build-supervisor.js +0 -47
  61. package/src/runtime/app-dev-build.js +0 -41
  62. package/src/runtime/app-dev-consumers.js +0 -154
  63. package/src/runtime/app-dev-host-lock.js +0 -80
  64. package/src/runtime/app-dev-process-identity.js +0 -111
  65. package/src/runtime/app-dev-roots.js +0 -284
  66. package/src/runtime/app-dev-server.js +0 -1136
  67. package/src/runtime/app-dev-sessions.js +0 -185
  68. package/src/runtime/cli-mode.generated.js +0 -5
  69. package/src/runtime/cli-mode.js +0 -34
@@ -4,6 +4,7 @@ description: Use when agents should work through the Notis CLI, especially to de
4
4
  feature_flag: cli_access
5
5
  mcp_resource: true
6
6
  mcp_tool_patterns: []
7
+ mcp_references: ["references/app-delivery.md", "references/tool-examples.md", "references/native-databases.md", "references/troubleshooting.md"]
7
8
  ---
8
9
 
9
10
  # Notis CLI Skill
@@ -14,7 +15,6 @@ This skill covers two main CLI workflows:
14
15
 
15
16
  1. Developing Notis apps locally.
16
17
  2. Accessing Notis, Composio, and MCP tools through the CLI.
17
-
18
18
  ## When to use this skill
19
19
 
20
20
  Activate this skill when:
@@ -71,146 +71,15 @@ This is especially important when:
71
71
 
72
72
  Treat the Notis CLI the same way you would treat a Composio-style tool router flow: discover what is available first, then execute the right tool through the CLI.
73
73
 
74
- ## Section 1: Developing Notis Apps
75
-
76
- Use this section when the goal is to create or update a Notis app from a local
77
- workspace or a hosted sandbox.
78
-
79
- Notis apps are Vite + React projects using `@notis/sdk`. After init or pull and editing, choose one terminal branch: local Desktop uses `dev → build verify user approval → deploy`; hosted sandbox uses `build → verify → identity/schema reconciliation → deploy`; Store submission is a later, separately confirmed action.
80
-
81
- Important: `deploy` only updates the installed app artifact for the current user or team. Store submission is a separate, user-gated step. After the user explicitly confirms that the current App Details page and Store listing are ready, `apps publish --confirm-ready` submits the matching deployed version through the backend review flow.
82
-
83
- Choose the execution path before changing the app:
84
-
85
- - **Hosted sandbox**: a sandbox instruction or `/vercel/sandbox` working tree
86
- proves that Desktop cannot mount the source. Do not run `apps dev`. A create
87
- or edit request authorizes `apps deploy` after `apps build` and automated
88
- `apps verify` pass unless the user explicitly requests preview-only,
89
- read-only, or no deployment; inspection, review, and diagnosis stay
90
- read-only. `apps pull <app-id>` links an existing app. Test before any remote
91
- mutation. If an opt-out applies, stop there without create/link, database
92
- mutation, deploy, or post-deploy checks. Otherwise, for a new unlinked app,
93
- compare profile state and `apps list --json` with the canonical
94
- `notis.config.ts` `name` and intended personal/team scope: link one exact
95
- editable non-development match after a metadata-only (`include_documents:
96
- false`) detail read proves scope, fail on any ambiguity/development
97
- collision/scope mismatch, or create only on zero exact matches. Default new
98
- apps to personal scope unless the user explicitly asks for team scope. Prove
99
- canonicalizing the config title yields its name. For personal creation, run
100
- `apps create "<canonical-config-title>" . --json` exactly once. For explicit
101
- team scope, discover/describe and dry-run `LOCAL_NOTIS_CREATE_APP`, execute it
102
- exactly once with team visibility and verified current team scope, verify the
103
- returned identity/scope, and link that exact id. In a fresh sandbox, install Agent Browser with `npm exec --yes --package
104
- agent-browser@latest -- agent-browser install` and run verification through
105
- `npx --yes --package @notis_ai/cli@latest --package agent-browser@latest --
106
- notis apps verify`. Read back the exact app id/version and Portal URL with `apps list --json`, run
107
- the same combined command with `apps verify --mode live`, and return the exact
108
- Portal URL. Stop before deployment on test failure and before retry on an
109
- outcome-unknown create or deploy.
110
- - **Local computer**: run `apps dev`, let the user test the DEV-badged app, and
111
- deploy that development identity directly only after the user explicitly
112
- asks; never run `apps create` after `apps dev`.
113
-
114
- ### App development workflow
115
-
116
- 1. Scaffold a new app (every published Store app is a scaffold; `notis apps scaffolds list [--search <term>]` lists them from the public registry, and `--from <slug>` downloads that app's source):
117
- - `npx --package @notis_ai/cli@latest -- notis apps init ["My App"] [--from <slug>]`
118
- 2. Or pull an existing app's source to edit it (the project is linked automatically):
119
- - `npx --package @notis_ai/cli@latest -- notis apps pull <app-id>`
120
- - then run `npm install`, increment `notisAppVersion`, and edit
121
- 3. **Local Desktop branch:** run `apps dev` for live testing, confirm the DEV
122
- app and root/mount acceptance checks, then run `apps build` and `apps verify`.
123
- Let the user test the DEV app and stop for explicit user approval. When
124
- approved, run exactly one `apps deploy` to promote the existing `dev_app_id`
125
- (or update the already linked app), then read it back. Never run `apps create`
126
- after `apps dev`.
127
- 4. **Hosted sandbox branch:** bootstrap Agent Browser as described above, then
128
- run `apps build` followed by the automated hosted `apps verify`. If automatic
129
- deployment is opted out, stop after those tests with no app create/link,
130
- database mutation, deploy, or post-deploy check. Otherwise, for a new hosted
131
- app, reconcile `.notis/state.json` and `apps list --json` against
132
- the canonical config `name` and intended scope (personal by default; team
133
- only when explicitly requested). Include
134
- development rows as collision checks. Link one exact editable non-dev match
135
- only after a metadata-only (`include_documents: false`) exact app detail
136
- proves scope; fail on multiple/scope mismatch, or create only on zero. Prove
137
- canonicalize(config title) equals config name. For personal creation, run
138
- `apps create "<canonical-config-title>" . --json` exactly once and verify id,
139
- slug, edit permission, and personal scope. For explicit team scope, discover
140
- and describe `LOCAL_NOTIS_CREATE_APP`, dry-run it, then execute it exactly once
141
- with the canonical title, team visibility, and verified current team scope;
142
- verify id/slug/team scope/edit permission and `apps link` that exact id. Then
143
- compare declared databases, mutate only
144
- missing/changed backward-compatible schemas with ownership proof, run exactly
145
- one `apps deploy`, and read back id/version/Portal URL before live verify.
146
- 5. Check project health:
147
- - `npx --package @notis_ai/cli@latest -- notis apps doctor`
148
- 6. Only after the user explicitly approves the current Store preview, submit the deployed version:
149
- - `npx --package @notis_ai/cli@latest -- notis apps publish --confirm-ready`
150
-
151
- ### App development rules
152
-
153
- - Always `build` before `deploy`; run `verify` before deploy when validating an app change.
154
- - Never run `apps dev` in a hosted sandbox. Deploy every successfully verified
155
- sandbox app create or edit unless explicitly told preview-only, read-only, or
156
- no-deploy, then prove the remote id/version and live runtime. Other app tasks
157
- do not authorize mutation.
158
- - Deploy does not create databases. Compare first; materialize only missing or
159
- changed hosted-app schemas, and verify exact ownership before an update.
160
- - Build and verify before hosted app creation or database mutation. Only
161
- backward-compatible schema expansion may happen before deployment.
162
- - In hosted sandboxes, bootstrap `agent-browser` and include its package on the
163
- verification command's `PATH`; `--no-browser` is not a passing automated gate.
164
- - Never deploy a local Desktop edit until the user tests the DEV app and asks.
165
- - Prefer `npx --package @notis_ai/cli@latest -- notis apps deploy` for the first deploy of a project already run with `apps dev`; it promotes the development app in place.
166
- - Link before `deploy`, or pass `--app-id <id>` when intentionally deploying without writing local link state.
167
- - Use `npx --package @notis_ai/cli@latest -- notis apps doctor` to diagnose configuration or dependency issues.
168
- - Use `npx --package @notis_ai/cli@latest -- notis apps list --json` to discover exact slugs, permissions, versions, and Portal links before linking and after deployment; use a metadata-only (`include_documents: false`) exact app-detail read to prove personal/team scope without materializing databases.
169
- - Never treat deploy approval as Store approval. Set visibility to Team or Public first, then run `apps publish --confirm-ready` only after the user explicitly confirms the current App Details page and Store listing.
170
- - `apps publish --confirm-ready` submits the deployed snapshot through the same backend review flow as App Details. It must reject missing confirmation, incomplete listing media, a local/deployed version mismatch, private visibility, or an existing pending review.
171
-
172
- ### App development command reference
173
-
174
- - `npx --package @notis_ai/cli@latest -- notis apps list` -- list accessible apps
175
- - `npx --package @notis_ai/cli@latest -- notis apps init` -- scaffold a new Vite + React + `@notis/sdk` project
176
- - `npx --package @notis_ai/cli@latest -- notis apps pull <app-id> [dir] [--force] [--source-version <n>]` -- download the persisted source snapshot for an installed app and link the local directory to that app/version; legacy apps must be redeployed once with the current CLI before they can be pulled
177
- - `npx --package @notis_ai/cli@latest -- notis apps dev` -- discover local apps, register desktop-local dev sessions, and load them as DEV-badged Workspace rows in the Electron Portal
178
- - `npx --package @notis_ai/cli@latest -- notis apps build` -- compile the production artifact
179
- - `npx --package @notis_ai/cli@latest -- notis apps verify` -- headless render-smoke packaged routes before deploy
180
- - `npx --package @notis_ai/cli@latest -- notis apps create` -- create a fresh remote app and optionally link the local project
181
- - `npx --package @notis_ai/cli@latest -- notis apps link` -- associate the project with a remote app
182
- - `npx --package @notis_ai/cli@latest -- notis apps deploy` -- upload the artifact and editable source snapshot to the linked installed app in Notis
183
- - `npx --package @notis_ai/cli@latest -- notis apps deploy --direct` -- deploy directly to Supabase storage, bypassing the backend server (auto-fallback when server is down)
184
- - `npx --package @notis_ai/cli@latest -- notis apps publish --confirm-ready` -- submit the matching deployed version for Team or Public Store review after explicit user confirmation
185
- - `npx --package @notis_ai/cli@latest -- notis apps doctor` -- run project diagnostics
186
-
187
- App Details remains the visual review surface and offers the same Publish/Update action. The CLI command is for agents completing an already approved submission; it does not weaken the separate confirmation gate.
188
-
189
- If the task is specifically about app structure, runtime behavior, or database/view packaging, pair this skill with the `notis-apps` skill. Use `notis-cli` for the command workflow and `notis-apps` for the product/runtime contract.
190
-
191
- ## IMPORTANT: When NOT to use tool access for app development
192
-
193
- When building or deploying a Notis app, do NOT use `npx --package @notis_ai/cli@latest -- notis tools exec` for app file operations:
194
-
195
- - Loading or saving app files -- use `npx --package @notis_ai/cli@latest -- notis apps build` and `npx --package @notis_ai/cli@latest -- notis apps deploy`
196
- - Linting app files -- use `npx --package @notis_ai/cli@latest -- notis apps build` which validates automatically
197
- - Managing app routes -- write standard Vite + React pages in `app/`, not raw JS files
198
-
199
- Database schemas are the exception: declaring a slug in `notis.config.ts` does
200
- not create it. Use the discovery-first native database tool workflow to
201
- create/update and read back each app-owned schema before deployment. Tool calls
202
- are also valid for testing runtime behavior after deployment.
203
-
204
- ## Section 2: Accessing Tools Through the Notis CLI
205
-
206
- Use this section when the current agent does not already have the right tool and needs to reach tools through Notis.
207
-
208
- This is the main escape hatch for:
209
-
210
- - direct MCP access
211
- - Composio-backed integrations
212
- - native Notis tools that are available through the generic CLI tool bridge
213
- - any task where you need to discover the canonical tool name and schema before execution
74
+ ## User and repository policy takes precedence
75
+
76
+ Default delivery below applies only when no more restrictive user or repository
77
+ instruction exists. Explicit preview-only/no-deploy requests and standing requirements
78
+ for explicit deployment consent override the default. Preserve that authority across
79
+ local and cloud runs. For local-only work, build and run stub verification; do not
80
+ create remote resources or activate an app. `apps dev` is not a supported delivery
81
+ path; use the CLI's documented build/verification harness. Store publication remains
82
+ separately authorized.
214
83
 
215
84
  ### Tool access workflow
216
85
 
@@ -258,131 +127,14 @@ discovery request before every connected-service action.
258
127
  - Use `--reconnect` to replace an existing connection. If multiple accounts exist, select one with `--connection-id <id>`.
259
128
  - For API keys, basic auth, or other credential JSON, prefer `--credentials -` and pipe or redirect stdin. Avoid inline secrets because they can enter shell history and process listings.
260
129
 
261
- ### Toolkit mental model
262
-
263
- Typical toolkit namespaces include:
264
-
265
- - `notis` for native Notis tools
266
- - `composio-*` for Composio-backed integrations
267
- - `mcp-*` for MCP-backed tools
268
-
269
- The pattern is:
270
-
271
- 1. discover toolkits
272
- 2. search tools
273
- 3. inspect schema if needed
274
- 4. execute the canonical tool
275
-
276
- ### Tool access examples
277
-
278
- Find a tool:
279
-
280
- ```bash
281
- npx --package @notis_ai/cli@latest -- notis tools toolkits
282
- npx --package @notis_ai/cli@latest -- notis tools search "list today's calendar events"
283
- ```
284
-
285
- Inspect a tool before execution:
286
-
287
- ```bash
288
- npx --package @notis_ai/cli@latest -- notis tools describe composio-googlecalendar-list_events
289
- npx --package @notis_ai/cli@latest -- notis tools exec composio-googlecalendar-list_events --get-schema
290
- ```
291
-
292
- Dry-run a tool call:
293
-
294
- ```bash
295
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --dry-run --arguments '{"database_slug":"tasks"}'
296
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --dry-run --arguments '{"database_id":"tasks-db-id","query":{"page_size":10}}'
297
- ```
298
-
299
- Execute a tool call:
300
-
301
- ```bash
302
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --arguments '{"database_slug":"tasks"}'
303
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments '{"database_id":"tasks-db-id","query":{"page_size":10}}'
304
- ```
305
-
306
- Connect a missing toolkit:
307
-
308
- ```bash
309
- npx --package @notis_ai/cli@latest -- notis tools link github
310
- ```
311
-
312
- Reconnect a credential-based toolkit without putting the secret in shell history:
313
-
314
- ```bash
315
- npx --package @notis_ai/cli@latest -- notis tools link dataforseo --reconnect --credentials - < credentials.json
316
- ```
317
-
318
- ## Native database access
319
-
320
- Native Notis databases are accessed through the generic tool workflow, not a first-class database command group. Use these canonical tool names:
321
-
322
- - `LOCAL_NOTIS_DATABASE_LIST_DATABASES` -- list databases accessible to the current profile
323
- - `LOCAL_NOTIS_DATABASE_GET_DATABASE` -- inspect read-only metadata and schema detail
324
- - `LOCAL_NOTIS_DATABASE_QUERY` -- query documents from a database
325
- - `LOCAL_NOTIS_DATABASE_UPSERT_DATABASE` -- create or update a database schema. Every database belongs to a Notis app: creation requires the owning app's slug or id in the `app` argument (create the app first with `LOCAL_NOTIS_CREATE_APP` if needed)
326
-
327
- Example workflow before building an app:
328
-
329
- ```bash
330
- npx --package @notis_ai/cli@latest -- notis tools search "list Notis databases"
331
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_LIST_DATABASES --arguments '{}'
332
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --get-schema
333
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --arguments '{"database_slug":"social_media_calendar"}'
334
- npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments '{"database_id":"social-media-calendar-db-id","query":{"page_size":1}}'
335
- ```
336
-
337
- When `LOCAL_NOTIS_DATABASE_LIST_DATABASES` or `LOCAL_NOTIS_DATABASE_GET_DATABASE` returns a database ID, prefer `database_id` for `LOCAL_NOTIS_DATABASE_QUERY`; `database_slug` remains supported as a fallback.
338
-
339
- ## Supporting commands
340
-
341
- - `npx --package @notis_ai/cli@latest -- notis whoami` — confirm which account and endpoint a command will target
342
- - `npx --package @notis_ai/cli@latest -- notis doctor` — verify CLI config, auth, routing, and API reachability before relying on the CLI
343
- - `npx --package @notis_ai/cli@latest -- notis describe <command...>` — get the exact command contract for first-class CLI commands
344
-
345
- ## Summary
346
-
347
- Use `notis-cli` for two things:
348
-
349
- 1. local app development through `npx --package @notis_ai/cli@latest -- notis apps ...`
350
- 2. tool discovery and execution through `npx --package @notis_ai/cli@latest -- notis tools ...`
351
-
352
- Most importantly: if you do not currently have the tool you need, especially for direct MCP or integration work, use the Notis CLI instead of treating the task as blocked.
353
-
354
- ## Troubleshooting
355
-
356
- ### CLI returns `auth_expired` or `auth_missing`
357
-
358
- The profile's browser authorization has lapsed or was never granted. Run
359
- `notis login` (add `--profile <name>` when the failing profile is not the
360
- active one) and have the user approve the browser prompt. In JSON/agent mode
361
- the first hint is the exact command to run. Do not copy refresh tokens into
362
- commands or try to mint a credential yourself.
363
-
364
- If the profile is a `dev-*` one, the fix is to restart `./dev.sh` in the
365
- workspace it belongs to, or to switch to a real account profile.
366
-
367
- ### Deploy fails with "network_error" or "fetch failed"
368
-
369
- The CLI defaults to the live Notis API (`https://api.notis.ai`, or
370
- `https://api-beta.notis.ai` when the signed-in user is on beta). Solutions:
371
-
372
- 1. Run `npx --package @notis_ai/cli@latest -- notis doctor` and confirm `api_base` is a live Notis host
373
- 2. Use `--direct` for app deploys when you only need Supabase storage upload: `npx --package @notis_ai/cli@latest -- notis apps deploy --direct`
374
- 3. If auth looks stale, run `npx --package @notis_ai/cli@latest -- notis login` and retry
375
-
376
- Localhost backends are a Notis-developer test lane only. Do not retarget the CLI at loopback from this skill — that path is owned by `./dev.sh`, which exposes its own lease-backed `dev-*` profile.
377
-
378
- ### `npx --package @notis_ai/cli@latest -- notis doctor` shows health/tool_roundtrip errors
379
-
380
- The CLI health check pings the configured live API. App development commands that are `backend_call: local` (`init`, `build`, `verify`, `link`, `doctor`) work offline. `dev`, `pull`, `create`, `list`, and normal `deploy` need the live API; `deploy --direct` can bypass it when Supabase credentials are available.
381
-
382
- ### Stale bundle in the portal after deploy
130
+ ## Task guides
383
131
 
384
- The portal caches app bundles by version. If you re-deploy to the same version, the portal may serve the cached old bundle. Solutions:
132
+ Read only the guide needed for this task. Relative links resolve in the skill bundle.
133
+ For hosted MCP, fetch the matching `notis://docs/notis-cli/references/<file>.md` URI
134
+ with resources/read or the available Notis resource-fetch tool; the root resource
135
+ also rewrites these links to their published URIs.
385
136
 
386
- 1. Hard refresh the portal page (Cmd+Shift+R)
387
- 2. Open browser DevTools > Application > Storage > Clear site data
388
- 3. The bundle cache key includes version number -- incrementing the version forces a fresh load
137
+ - [App delivery](references/app-delivery.md)
138
+ - [Toolkit mental model](references/tool-examples.md)
139
+ - [Native database access](references/native-databases.md)
140
+ - [Supporting commands](references/troubleshooting.md)
@@ -0,0 +1,18 @@
1
+ # App delivery
2
+
3
+ Use the canonical `notis-apps` skill’s entrypoint and [release guide](../../notis-apps/references/release.md).
4
+ For hosted MCP fetch `notis://docs/notis-apps` and `notis://docs/notis-apps/references/release.md`.
5
+ User/repository no-deploy and explicit-consent policies take precedence over default delivery.
6
+
7
+ ## IMPORTANT: When NOT to use tool access for app development
8
+
9
+ When building or deploying a Notis app, do NOT use `npx --package @notis_ai/cli@latest -- notis tools exec` for app file operations:
10
+
11
+ - Loading or saving app files -- use `npx --package @notis_ai/cli@latest -- notis apps build` and `npx --package @notis_ai/cli@latest -- notis apps deploy`
12
+ - Linting app files -- use `npx --package @notis_ai/cli@latest -- notis apps build` which validates automatically
13
+ - Managing app routes -- write standard Vite + React pages in `app/`, not raw JS files
14
+
15
+ Database schemas are the exception: declaring a slug in `notis.config.ts` does
16
+ not create it. Use the discovery-first native database tool workflow to
17
+ create/update and read back each app-owned schema before deployment. Tool calls
18
+ are also valid for testing runtime behavior after deployment.
@@ -0,0 +1,20 @@
1
+ ## Native database access
2
+
3
+ Native Notis databases are accessed through the generic tool workflow, not a first-class database command group. Use these canonical tool names:
4
+
5
+ - `LOCAL_NOTIS_DATABASE_LIST_DATABASES` -- list databases accessible to the current profile
6
+ - `LOCAL_NOTIS_DATABASE_GET_DATABASE` -- inspect read-only metadata and schema detail
7
+ - `LOCAL_NOTIS_DATABASE_QUERY` -- query documents from a database
8
+ - `LOCAL_NOTIS_DATABASE_UPSERT_DATABASE` -- create or update a database schema. Every database belongs to a Notis app: creation requires the owning app's slug or id in the `app` argument (create the app first with `LOCAL_NOTIS_CREATE_APP` if needed)
9
+
10
+ Example workflow before building an app:
11
+
12
+ ```bash
13
+ npx --package @notis_ai/cli@latest -- notis tools search "list Notis databases"
14
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_LIST_DATABASES --arguments '{}'
15
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --get-schema
16
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --arguments '{"database_slug":"social_media_calendar"}'
17
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments '{"database_id":"social-media-calendar-db-id","query":{"page_size":1}}'
18
+ ```
19
+
20
+ When `LOCAL_NOTIS_DATABASE_LIST_DATABASES` or `LOCAL_NOTIS_DATABASE_GET_DATABASE` returns a database ID, prefer `database_id` for `LOCAL_NOTIS_DATABASE_QUERY`; `database_slug` remains supported as a fallback.
@@ -0,0 +1,56 @@
1
+ ### Toolkit mental model
2
+
3
+ Typical toolkit namespaces include:
4
+
5
+ - `notis` for native Notis tools
6
+ - `composio-*` for Composio-backed integrations
7
+ - `mcp-*` for MCP-backed tools
8
+
9
+ The pattern is:
10
+
11
+ 1. discover toolkits
12
+ 2. search tools
13
+ 3. inspect schema if needed
14
+ 4. execute the canonical tool
15
+
16
+ ### Tool access examples
17
+
18
+ Find a tool:
19
+
20
+ ```bash
21
+ npx --package @notis_ai/cli@latest -- notis tools toolkits
22
+ npx --package @notis_ai/cli@latest -- notis tools search "list today's calendar events"
23
+ ```
24
+
25
+ Inspect a tool before execution:
26
+
27
+ ```bash
28
+ npx --package @notis_ai/cli@latest -- notis tools describe composio-googlecalendar-list_events
29
+ npx --package @notis_ai/cli@latest -- notis tools exec composio-googlecalendar-list_events --get-schema
30
+ ```
31
+
32
+ Dry-run a tool call:
33
+
34
+ ```bash
35
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --dry-run --arguments '{"database_slug":"tasks"}'
36
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --dry-run --arguments '{"database_id":"tasks-db-id","query":{"page_size":10}}'
37
+ ```
38
+
39
+ Execute a tool call:
40
+
41
+ ```bash
42
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --arguments '{"database_slug":"tasks"}'
43
+ npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments '{"database_id":"tasks-db-id","query":{"page_size":10}}'
44
+ ```
45
+
46
+ Connect a missing toolkit:
47
+
48
+ ```bash
49
+ npx --package @notis_ai/cli@latest -- notis tools link github
50
+ ```
51
+
52
+ Reconnect a credential-based toolkit without putting the secret in shell history:
53
+
54
+ ```bash
55
+ npx --package @notis_ai/cli@latest -- notis tools link dataforseo --reconnect --credentials - < credentials.json
56
+ ```
@@ -0,0 +1,39 @@
1
+ ## Supporting commands
2
+
3
+ - `npx --package @notis_ai/cli@latest -- notis whoami` — confirm which account and endpoint a command will target
4
+ - `npx --package @notis_ai/cli@latest -- notis doctor` — verify CLI config, auth, routing, and API reachability before relying on the CLI
5
+ - `npx --package @notis_ai/cli@latest -- notis describe <command...>` — get the exact command contract for first-class CLI commands
6
+
7
+ ## Troubleshooting
8
+
9
+ ### CLI returns `auth_expired` or `auth_missing`
10
+
11
+ The profile's browser authorization has lapsed or was never granted. Run
12
+ `notis login` (add `--profile <name>` when the failing profile is not the
13
+ active one) and have the user approve the browser prompt. In JSON/agent mode
14
+ the first hint is the exact command to run. Do not copy refresh tokens into
15
+ commands or try to mint a credential yourself.
16
+
17
+ If the profile is a `dev-*` one, the fix is to restart `./dev.sh` in the
18
+ workspace it belongs to, or to switch to a real account profile.
19
+
20
+ ### Deploy fails with "network_error" or "fetch failed"
21
+
22
+ Run `notis doctor` to verify the effective profile and endpoint. Read back the exact app ID,
23
+ version and release state before retrying. An uncertain network response is not proof of rollback.
24
+ There is no direct storage deployment path. Repair authentication when needed without changing the
25
+ intended profile, then reconcile the previous outcome before starting a new release.
26
+
27
+ Localhost backends are a Notis-developer test lane owned by `./dev.sh` and its lease-backed profile.
28
+ Do not silently switch between that lane and a live account.
29
+
30
+ ### Health or tool-roundtrip errors
31
+
32
+ Local scaffold/build and stub verification can run without an API connection (dependencies and
33
+ browser tooling must already be available). `link`, `pull`, `create`, `list`, `deploy`, live verification
34
+ and Store operations require the intended backend. Never bypass it.
35
+
36
+ ### Stale bundle in Portal after an update
37
+
38
+ Every successful release gets a new integer deployment version. Read back that version, then use
39
+ normal refresh/navigation to load it. Never overwrite or decrement an existing deployment version.