ente-cli 0.4.89 → 0.4.91

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 CHANGED
@@ -86,8 +86,9 @@ ENTE_PROFILE=mail-operator ente agent mail threads --unread
86
86
 
87
87
  Agent keys use scoped REST calls and signed CLI JWTs carrying the agent and
88
88
  credential IDs. Content calls recheck the live key and agent policy, including
89
- cached JWT calls. Human-only settings and administration stay in the web app;
90
- there is no unrestricted account-key fallback. CLI pairing without `--agent`
89
+ cached JWT calls. Human-only settings stay in the web app; administration uses
90
+ a separate platform key (see Admin access). There is no unrestricted account-key
91
+ fallback. CLI pairing without `--agent`
91
92
  creates a named connection agent. MCP authorization creates a connection agent
92
93
  named for the client.
93
94
 
@@ -103,6 +104,7 @@ project `.env` file.
103
104
  ```bash
104
105
  ente search "Alice"
105
106
  ente entity list --type person
107
+ ente entity get "Alice" --projection full --limit 50 --json
106
108
  ente entity rename "Lorey Georg" "Georg Lorey"
107
109
  ente task list --due today
108
110
  ente activity create --type note --title "Meeting notes" --entity "Alice" --space "Personal"
@@ -124,6 +126,14 @@ ente tasks
124
126
  ente guide # concepts; `ente guide <topic>`: entities, tasks, activities, search, patterns, limits
125
127
  ```
126
128
 
129
+ Entity search, list and detail default to the compact projection. Search returns
130
+ 5 matches by default; list returns 50, and detail returns 20 activities. Search
131
+ and list accept up to 1,000 results; detail accepts up to 200 activities.
132
+ `--projection full` returns the public fields without compact text excerpts.
133
+ `entity get` also accepts `--hours-back` and `--min-count`. A missing or
134
+ archived detail returns `{"data":null}` in JSON. JSON preserves the canonical
135
+ result under `data`; a root `spaces` map supplies the CLI's space labels.
136
+
127
137
  Every command supports `--json`. Run `ente --help` or `ente <group> --help`.
128
138
 
129
139
  ### Command groups
@@ -138,7 +148,8 @@ Every command supports `--json`. Run `ente --help` or `ente <group> --help`.
138
148
  | `list` | `create` (`--column`, `--pin`), `add` (`--key` upsert), `update` (`--attr`, `--title`), `import` (JSONL upsert by `--key`, `--dry-run`), `show` (`--all`, `--cursor`, `--where`, `--view`), `column add`, `column remove` |
139
149
  | `pins` | `list` |
140
150
  | `space` | `members` |
141
- | `recording` | `list`, `show`, `inspect`, `rerun` (admin only) |
151
+ | `recording` | `list`, `show`, `inspect`, `rerun`, `orphans`, `backups` (platform key) |
152
+ | `admin` | `tables`, `get`, `page` — read-only inspector over any table (platform key) |
142
153
  | `canvas` | `boards`, `html list`, `html get`, `html create`, `html update`, `html delete` |
143
154
  | `notification` | `send` (emails only your own Ente account address; optional HTML, file attachments, and CID inline images) |
144
155
  | `agent` | `list`, `threads`, `show`, `new`, `send`, `config show`, `config set-prompt`, `schedules configure` |
@@ -404,9 +415,38 @@ Published conversations remain durable after provider cache expiry/disconnect.
404
415
  Their individual messages appear in entity activity feeds; activity content reads
405
416
  return bounded, read-only email blocks with continuation cursors.
406
417
 
418
+ ### Admin access (platform key)
419
+
420
+ Admin commands (`recording …`, `users …`, `health page`, `admin …`) use the
421
+ platform key of a global admin, never the agent key. Issue it in the web app
422
+ under Admin → Platform keys, then store it once:
423
+
424
+ ```bash
425
+ ente auth platform login --url <convex-site-url> --key-stdin # verifies the exchange first
426
+ ente auth platform status [--json]
427
+ ente auth platform logout
428
+ ```
429
+
430
+ It lives in `platform.toml` next to the profiles (or the env pair
431
+ `ENTE_PLATFORM_API_URL`/`ENTE_PLATFORM_API_KEY`) and reaches every admin
432
+ function, including `users reset-password` and `users set-admin`, but no user,
433
+ space or agent command. Without it admin commands fail; they never fall back.
434
+
435
+ `ENTE_PLATFORM_PROFILE` selects a named file in `platform-profiles/<name>.toml`.
436
+ Agent profiles keep their existing `profiles/<name>.toml` paths.
437
+
438
+ ```bash
439
+ ente admin tables # every inspectable table
440
+ ente admin get <table> <id> [--json] # one document, secrets "[redacted]"
441
+ ente admin page <table> [--limit 20] [--cursor <c>] [--order asc|desc] [--json]
442
+ ```
443
+
444
+ The inspector is read-only, reads any user's data, and includes `_storage` and
445
+ `_scheduled_functions`; Convex Auth's own tables are not inspectable.
446
+
407
447
  ### Guardian health (global admin)
408
448
 
409
- `ente health page --profile default --source toolMessages --since <epoch-ms> --until <epoch-ms> --json`
449
+ `ente health page --source toolMessages --since <epoch-ms> --until <epoch-ms> --json`
410
450
  reads one content-free aggregate page. Use `--source threads --status idle|running|error`
411
451
  or `--source recordings --status pending|transcribing|structuring|reflecting|done|error`
412
452
  for current job counts. Use `--since 0` for active jobs; terminal recording statuses require a positive
@@ -414,10 +454,10 @@ for current job counts. Use `--since 0` for active jobs; terminal recording stat
414
454
  timestamps are outside that coverage.
415
455
  `--stale-after-ms` defaults to 1800000; `--limit` accepts 1–100. Follow
416
456
  `data.continueCursor` with `--cursor` and unchanged arguments until `data.isDone`.
417
- Counts are page-local. Tool windows are at most seven days. This is a human-only
418
- global administration endpoint. Agent-bound CLI credentials cannot call it,
419
- including credentials sponsored by an administrator. Use the web administration
420
- interface for these operations; creating a broader agent key does not grant access.
457
+ Counts are page-local. Tool windows are at most seven days. This is a global
458
+ administration endpoint: it uses the platform key (see Admin access), never an
459
+ agent-bound credential, even one sponsored by an administrator. Creating a broader
460
+ agent key does not grant access.
421
461
  No customer content or record IDs are returned. Unknown tool names become `other`.
422
462
  See `docs/admin-health-monitoring.md` for collector continuity and limits.
423
463
 
@@ -475,7 +515,7 @@ across pages. Results put aggregates and continuation under `data.page`, with
475
515
  window/observation/coverage alongside. Read every page before claiming complete
476
516
  counts; terminal recording history excludes missing progress timestamps. No
477
517
  message bodies or customer identifiers. The legacy `health page` remains a
478
- separate human-admin JWT surface and never serves as a fallback.
518
+ separate platform-key admin surface and never serves as a fallback.
479
519
 
480
520
  Diagnostics is unavailable inside Ente-hosted chats, recordings and automations.
481
521
  Use the external operator command. Whole-history panel sharing does not grant
package/dist/SKILL.md CHANGED
@@ -131,6 +131,8 @@ Check the exit before parsing. Do not append a successful help command and treat
131
131
  its exit as the preceding command's result. `entity show` reports the supported
132
132
  `entity get` command and fails without making a request.
133
133
 
134
+ Entity reads default to compact public DTOs. Search defaults to 5 results; entity list without a query defaults to 50; entity get defaults to 20 activities. Search/list accept at most 1,000, and get accepts at most 200. Use `--projection full` for full public text and fields. JSON keeps the canonical result under `data` with space labels in the root `spaces` envelope. Missing or archived detail returns `data: null`.
135
+
134
136
  For inbox coverage, page the unfiltered `agent mail threads` list to completion,
135
137
  then inspect thread messages, including updates to older threads. `--unread`
136
138
  and `--needs-reply` answer different questions; unread alone misses read but
@@ -153,16 +155,16 @@ ente auth profiles
153
155
  # Ask keeps scoped evidence on synthesis failure; check synthesisStatus.
154
156
  # Optional sourceHash/sourceFingerprint/passage metadata binds citations to a source version.
155
157
  # query remains deterministic and never starts embedding/indexing. See guide ask-the-graph.
156
- ente search "Alice" [--type person] [--json]
158
+ ente search "Alice" [--type person] [--space <name>] [--limit 5] [--projection compact|full] [--json]
157
159
  ente ask "What's open with Erik?" [--space <name>] [--entity <name>] [--evidence] [--json] # AI answer + citations
158
160
  ente query "QM system export" [--space <name>] [--entity <name>] [--since <epoch-ms>] [--until <epoch-ms>] [--limit 12] [--verbose] [--json] # evidence only, no AI
159
161
 
160
162
  # Entities
161
- ente entity list [--query <text>] [--type person|org|project|topic|place|object] [--space <name>] [--limit 50] [--archived] [--json]
163
+ ente entity list [--query <text>] [--type person|org|project|topic|place|object] [--space <name>] [--limit <count>] [--projection compact|full] [--archived] [--json]
162
164
  ente entity create "Jane Doe" --type person [--pin "Acme Corp"] [--share-parents --parent-space-grant-fingerprint <token>] [--alias "JD"] [--attr email=jane@acme.com] [--tag vip] [--description "CTO at Acme"] [--json]
163
165
  ente entity create "Leistungsphase 1" --type topic --space "Studio" --parent "Building A" --exclusive-parent [--json]
164
166
  ente entity duplicate <name-or-id> --space <space> [--name "New project"] [--include-exclusive-children] [--json]
165
- ente entity get "Jane Doe" [--json]
167
+ ente entity get "Jane Doe" [--limit 20] [--hours-back <hours>] [--min-count 5] [--projection compact|full] [--json]
166
168
  ente entity update "Jane Doe" [--name "Jane A. Doe"] [--alias-add "Jane"] [--alias-remove "JD"] [--attr role=CEO] [--tag vip] [--description "…"] [--json]
167
169
  ente entity rename "Lorey Georg" "Georg Lorey" # change display name
168
170
  ente entity pin "Jane Doe" "Acme Corp" [--role "student"] [--share-parents --parent-space-grant-fingerprint <token>] [--json]
@@ -176,8 +178,8 @@ ente entity restore <entity-id> [--share-parents --parent-space-grant-fingerprin
176
178
  # Activities
177
179
  ente activity list [--entity "Jane"] [--compact] [--cursor <nextCursor>] [--min-count 0] [--type note|conversation|meeting|call|message|task] [--attr k=v] [--only-open] [--hours 168] [--limit 20] [--sort deadline|created] [--json]
178
180
  ente activity create --type meeting --title "Call with Jane" --entity "Jane Doe" --entity "Acme Corp" --space "Work" [--content "…"] [--content-file ./notes.md] [--auto-link --entity-space-grant-fingerprint <token>] [--json]
179
- ente activity search "quarterly review" [--entity "Acme"] [--type meeting] [--limit 10] [--json]
180
- ente activity get <activityId> [--json] # complete detail: body, full nested agenda, messages/replies, entities, attachments
181
+ ente activity search "quarterly review" [--entity "Acme"] [--type meeting] [--limit 20] [--projection compact|full] [--json]
182
+ ente activity get <activityId> [--projection compact|full] [--json] # public detail; use --projection full for full text and attachments
181
183
  ente activity transcript <activityId> [--grep "Preis"] [--context 2] [--recording <id>] [--json] # transcript of the recording behind it
182
184
  ente activity update <activityId> [--title "…"] [--content "…"] [--deadline "2026-05-26" | --clear-deadline] [--entity-add "Bob"] [--entity-remove "Carol"] [--agent-assignee <agentId> ... | --clear-agent-assignees] [--json]
183
185
  ente activity content read <activityId> [--cursor <cursor> --expected-version <version>] [--max-blocks 20] [--max-characters 12000] [--json]
@@ -189,9 +191,9 @@ ente activity restore <activityId> [--json]
189
191
 
190
192
  # Database lists (entity + typed columns; each row is a note/task activity; no date column type)
191
193
  ente list create "<name>" --space "<space>" [--icon <topic-icon>] [--column "key[=Label]:text|number|boolean|single-select|multi-select[:opt,opt]"] [--pin "<parent>" [--share-parents --parent-space-grant-fingerprint <token>]] [--json]
192
- ente list add "<list>" --title "…" [--attr k=v ...] [--key <textColumn>] [--content-file ./row.md] [--json] # --key = upsert by that cell
194
+ ente list add "<list>" [--space "<space>"] --title "…" [--attr k=v ...] [--key <textColumn>] [--content-file ./row.md] [--json] # --key = upsert by that cell
193
195
  ente list update "<list>" <rowId> [--attr k=v ...] [--title "…"] [--json] # empty value clears a cell
194
- ente list import "<list>" --file rows.jsonl --key <textColumn> [--dry-run] [--concurrency 4] [--json] # {"title","attrs","content"} per line → created/updated/unchanged
196
+ ente list import "<list>" [--space "<space>"] --file rows.jsonl --key <textColumn> [--dry-run] [--concurrency 4] [--json] # {"title","attrs","content"} per line → created/updated/unchanged
195
197
  ente list show "<list>" [--all | --cursor <nextCursor>] [--limit 100] [--where k=v ...] [--view] [--json] # all rows by default; --view = table's saved filters
196
198
  # Rows are activities: trash with `ente activity delete <rowId>`, promote with `ente activity update <rowId> --entity-add "<entity>"`. Guide: playbooks/database-list-sync.md
197
199
 
@@ -250,6 +252,12 @@ ente agent mail reply <thread-id> --message <message-id> --reply-all (--text "Re
250
252
  ente agent mail mark <thread-id> --state-version <version> (--handled | --open | --needs-reply | --read | --unread) [--json]
251
253
  ```
252
254
 
255
+ New list rows require explicit `--space`, including import dry runs and lists in a single space. Updates to existing rows keep their current space.
256
+
257
+
258
+ Activity search and get return canonical public DTOs, defaulting to compact text. Use `--projection full` to include full public fields and attachment metadata. Missing or archived detail returns `data: null`. Search accepts at most 200 results and `--entity` includes the same bounded direct-child history as other canonical reads. The JSON result stays under `data`; `spaces` is a separate label envelope. Activity list keeps its installed filtering, sorting and pagination profile.
259
+
260
+
253
261
  Received attachments are available through the same bound agent credential;
254
262
  no browser login is needed. `ente agent mail show <thread-id> --json` lists
255
263
  `attachments` on each message with `attachmentId`, `filename`, `mimeType`, and
@@ -424,6 +432,35 @@ ente models web-search on|off # Linkup web search f
424
432
  ente users set-plan <email> own_models # admin: move a user onto the plan
425
433
  ```
426
434
 
435
+ ### Admin access (platform key)
436
+
437
+ Admin commands (`recording …`, `users …`, `health page`, `admin …`) use the
438
+ platform key of a global admin, never the agent key. Issue it in the web app
439
+ under Admin → Platform keys, then store it once:
440
+
441
+ ```bash
442
+ ente auth platform login --url <convex-site-url> --key-stdin # verifies the exchange first
443
+ ente auth platform status [--json]
444
+ ente auth platform logout
445
+ ```
446
+
447
+ It lives in `platform.toml` next to the profiles (or the env pair
448
+ `ENTE_PLATFORM_API_URL`/`ENTE_PLATFORM_API_KEY`) and reaches every admin
449
+ function, including `users reset-password` and `users set-admin`, but no user,
450
+ space or agent command. Without it admin commands fail; they never fall back.
451
+
452
+ `ENTE_PLATFORM_PROFILE` selects a named file in `platform-profiles/<name>.toml`.
453
+ Agent profiles keep their existing `profiles/<name>.toml` paths.
454
+
455
+ ```bash
456
+ ente admin tables # every inspectable table
457
+ ente admin get <table> <id> [--json] # one document, secrets "[redacted]"
458
+ ente admin page <table> [--limit 20] [--cursor <c>] [--order asc|desc] [--json]
459
+ ```
460
+
461
+ The inspector is read-only, reads any user's data, and includes `_storage` and
462
+ `_scheduled_functions`; Convex Auth's own tables are not inspectable.
463
+
427
464
  ### Recordings (admin — debug a failing recording)
428
465
 
429
466
  ```bash
@@ -435,7 +472,7 @@ ente recording backups [--state failed|joining|capturing] [--user <email|id>] [-
435
472
  ente recording backups join <backupId> [--now] # retry a failed join; --now joins one still waiting for its device
436
473
  ```
437
474
 
438
- - Admin-only (`api.admin.recordings.*`); the ordinary `recordings.*` API is creator-scoped.
475
+ - Admin-only (`api.admin.recordings.*`, platform key); the ordinary `recordings.*` API is creator-scoped.
439
476
  - `rerun` never modifies or deletes the stored audio; `--wait` polls to `done`/`error` and exits non-zero on failure.
440
477
  - `--status` scans newest-first and says so when the sweep is capped.
441
478
  - A backup in `failed` holds the only server copy of audio whose device never came back; read `error`, fix the cause, then `backups join`.
@@ -601,7 +638,7 @@ Prepare a new review for remaining contents. Cancel only before execution.
601
638
 
602
639
  ### Guardian health (global admin)
603
640
 
604
- `ente health page --profile default --source toolMessages --since <epoch-ms> --until <epoch-ms> --json`
641
+ `ente health page --source toolMessages --since <epoch-ms> --until <epoch-ms> --json`
605
642
  reads one content-free aggregate page. Use `--source threads --status idle|running|error`
606
643
  or `--source recordings --status pending|transcribing|structuring|reflecting|done|error`
607
644
  for current job counts. Use `--since 0` for active jobs; terminal recording statuses require a positive
@@ -609,10 +646,10 @@ for current job counts. Use `--since 0` for active jobs; terminal recording stat
609
646
  timestamps are outside that coverage.
610
647
  `--stale-after-ms` defaults to 1800000; `--limit` accepts 1–100. Follow
611
648
  `data.continueCursor` with `--cursor` and unchanged arguments until `data.isDone`.
612
- Counts are page-local. Tool windows are at most seven days. This is a human-only
613
- global administration endpoint. Agent-bound CLI credentials cannot call it,
614
- including credentials sponsored by an administrator. Use the web administration
615
- interface for these operations; creating a broader agent key does not grant access.
649
+ Counts are page-local. Tool windows are at most seven days. This is a global
650
+ administration endpoint: it uses the platform key (see Admin access), never an
651
+ agent-bound credential, even one sponsored by an administrator. Creating a broader
652
+ agent key does not grant access.
616
653
  No customer content or record IDs are returned. Unknown tool names become `other`.
617
654
  See `docs/admin-health-monitoring.md` for collector continuity and limits.
618
655