ente-cli 0.4.99 → 0.4.101
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 +68 -9
- package/dist/SKILL.md +81 -15
- package/dist/cli.mjs +24261 -23969
- package/dist/cli.mjs.map +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -92,12 +92,46 @@ fallback. CLI pairing without `--agent`
|
|
|
92
92
|
creates a named connection agent. MCP authorization creates a connection agent
|
|
93
93
|
named for the client.
|
|
94
94
|
|
|
95
|
-
Named profiles are optional
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
Named profiles are optional when one global default is sufficient.
|
|
96
|
+
Profile selection uses `--profile`, then `ENTE_PROFILE`, then the nearest bound
|
|
97
|
+
ancestor of the current directory, then the global `config.toml` default.
|
|
98
|
+
Folder bindings are machine-local in the Ente config directory's `bindings.json`;
|
|
99
|
+
no repository file selects an identity. Paths resolve symlinks before matching.
|
|
100
|
+
A selected missing profile fails instead of falling back to another identity.
|
|
101
|
+
Complete `ENTE_API_URL` / `ENTE_API_KEY` overrides still replace file credentials;
|
|
102
|
+
partial overrides fail closed. `auth status` reports credential source separately
|
|
103
|
+
from `profileSource` and `boundDirectory`.
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
ente auth bind /absolute/operator/folder operator-name
|
|
107
|
+
ente auth bindings --json
|
|
108
|
+
ente auth status --profile operator-name --json
|
|
109
|
+
ente auth unbind /absolute/operator/folder
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Bind an existing authenticated profile. Nested bindings override their parents.
|
|
113
|
+
Platform administration credentials stay separate and ignore folder bindings.
|
|
114
|
+
Bindings are defaults, not a security boundary. Use a separate OS account or
|
|
115
|
+
container when operators must not read each other's keys. Never commit a key
|
|
116
|
+
or put it in a project `.env` file.
|
|
117
|
+
|
|
118
|
+
Inspect the selected credential before work:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
ente auth whoami --json
|
|
122
|
+
ente agent permissions --json
|
|
123
|
+
ente agent permissions --check "Work" --action write --json
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
`whoami` reports the selected profile and its resolution `source`, the agent ID,
|
|
127
|
+
name, icon, mailbox, active state, home space, and live scopes. The permission
|
|
128
|
+
list includes account-visible spaces denied to the key, with `access` of `none`,
|
|
129
|
+
`read`, or `write`, and server-derived `canRead`/`canWrite` flags. Scopes and OAuth
|
|
130
|
+
consent can restrict those flags independently. Account panel visibility is
|
|
131
|
+
separate from operational access. `--check` accepts an exact space name or ID
|
|
132
|
+
and `--action read|write`; denial exits nonzero and names the web app's
|
|
133
|
+
**Agent actions** and Connections scope settings. These commands never grant
|
|
134
|
+
rights, invoke a provider, or print keys.
|
|
101
135
|
|
|
102
136
|
## Usage
|
|
103
137
|
|
|
@@ -142,7 +176,7 @@ Every command supports `--json`. Run `ente --help` or `ente <group> --help`.
|
|
|
142
176
|
|
|
143
177
|
| Group | Commands |
|
|
144
178
|
|---|---|
|
|
145
|
-
| `auth` | `pair`, `login`, `status`, `logout`, `profiles` |
|
|
179
|
+
| `auth` | `pair`, `login`, `status`, `whoami`, `logout`, `profiles`, `bind`, `unbind`, `bindings` |
|
|
146
180
|
| `entity` | `list`, `create`, `get`, `update` (`--name`, `--tag`, `--description`), `rename`, `archive`, `restore` (`--share-parents` plus the returned grant fingerprint), `pin` (`--role`, optional confirmed parent grants), `unpin`, `add-to-space`, `remove-from-space` (`--remove-from-activities` optional) |
|
|
147
181
|
| `activity` | `list`, `create`, `search`, `get`, `transcript` (`--grep`, `--context`), `update`, `delete`, `restore`, `message add`, `attachment upload` |
|
|
148
182
|
| `agenda` | `create-point`, `link-task` |
|
|
@@ -155,7 +189,7 @@ Every command supports `--json`. Run `ente --help` or `ente <group> --help`.
|
|
|
155
189
|
| `canvas` | `boards`, `html list`, `html get`, `html create`, `html update`, `html delete` |
|
|
156
190
|
| `files` | `list`, `upload` (local file at most 10 MiB, or an activity attachment), `link`, `create-folder` — the entity's Nextcloud folder via your own connection; personal agent key only (MCP: `entity_files_list`, `entity_file_upload`, `entity_folder_link`, `entity_folder_create`) |
|
|
157
191
|
| `notification` | `send` (emails only your own Ente account address; optional HTML, file attachments, and CID inline images) |
|
|
158
|
-
| `agent` | `list`, `threads`, `show`, `new`, `send`, `config show`, `config set-prompt`, `schedules configure` |
|
|
192
|
+
| `agent` | `permissions`, `list`, `threads`, `show`, `new`, `send`, `config show`, `config set-prompt`, `schedules configure` |
|
|
159
193
|
| `agent mail` | `address`, `threads`, `show`, `send`, `reply`, `mark` |
|
|
160
194
|
| top-level | `search`, `ask`, `query`, `tasks`, `guide` |
|
|
161
195
|
|
|
@@ -353,6 +387,17 @@ at most 20 address candidates with continuation. For example:
|
|
|
353
387
|
ente agent user-mailbox --request '{"operation":"recipients","connectionId":"<permitted-private-connection>","query":"Alex Morgan"}'
|
|
354
388
|
```
|
|
355
389
|
|
|
390
|
+
When asked to write a new email from the inbox with no message selected, open
|
|
391
|
+
the draft first with one `editVisible` patch. Use an explicit address or a clear,
|
|
392
|
+
explicitly requested contact already in the authorized captured context. Otherwise
|
|
393
|
+
leave `draft.to` empty, including ambiguous, missing, incomplete or unavailable
|
|
394
|
+
matches. Keep the requested subject and body; all fields may be empty for a blank
|
|
395
|
+
email. Do not delay opening for lookup, history, provider research or clarification.
|
|
396
|
+
Never pick an arbitrary candidate. Explain an unresolved name after preparing the
|
|
397
|
+
draft. Later explicit recipient research retains the existing recency and access
|
|
398
|
+
checks. Opening and autosaving a draft never authorizes sending.
|
|
399
|
+
|
|
400
|
+
Outside inbox composition, use recipient resolution for missing requested names.
|
|
356
401
|
For interactive name resolution, add `"resolve":true` (without `cursor`). The
|
|
357
402
|
server discovers names and updates all candidate addresses in one recency pass.
|
|
358
403
|
It uses a shared ceiling of 20 cached pages of at most 200 records (4000 reads
|
|
@@ -360,7 +405,8 @@ across both passes, with a separate byte bound per page), or 4 provider pages
|
|
|
360
405
|
of at most 20 matching headers (80 fetched headers; native searches, metadata
|
|
361
406
|
requests and retries are additional network operations). It returns terminal
|
|
362
407
|
`resolutionComplete`, `discoveryComplete`, `recencyComplete` and budget metadata.
|
|
363
|
-
If incomplete or truncated, ask for an explicit address or selection
|
|
408
|
+
If incomplete or truncated, ask for an explicit address or selection before choosing
|
|
409
|
+
a recipient; this does not block opening an inbox draft with an empty recipient. Do not
|
|
364
410
|
claim uniqueness or latest contact, automatically restart resolution, or expand
|
|
365
411
|
to provider research. Preserve all requested recipients. Provider source is for
|
|
366
412
|
explicitly requested or necessary provider/older correspondence searches.
|
|
@@ -565,3 +611,16 @@ ente entity field remove <valueId>
|
|
|
565
611
|
replaces that field's values; `"value":null` removes them. Entity `--attr` is
|
|
566
612
|
retained only to report the moved-to-fields error. Activity/task/list attributes
|
|
567
613
|
are unchanged. Entity reads expose field/value IDs, labels, types and text.
|
|
614
|
+
|
|
615
|
+
### Experimental Ask availability
|
|
616
|
+
|
|
617
|
+
Hosted `ente ask` is an opt-in beta for the existing private cohort, not a general
|
|
618
|
+
AI chat or included-model execution API. Most accounts receive an explanation
|
|
619
|
+
without model execution. Explicit own/instance Ask model slots retain their route.
|
|
620
|
+
Use `ente search`, `ente entity get`, `ente activity search/list/get` and summarize
|
|
621
|
+
records with your agent. Do not change provider/model settings to repair beta
|
|
622
|
+
unavailability. Ask exits nonzero unless `synthesisStatus` is `answered`.
|
|
623
|
+
|
|
624
|
+
Default/lexical `ente query` remains deterministic and available without AI.
|
|
625
|
+
Hybrid/semantic query requires private beta enrollment and separate passage
|
|
626
|
+
consent; unavailable responses point to ordinary commands and lexical query.
|
package/dist/SKILL.md
CHANGED
|
@@ -68,12 +68,43 @@ including cached JWT calls. There is no unrestricted user-key fallback. Create
|
|
|
68
68
|
and manage keys from the agent’s Connections settings in `/agents`; several
|
|
69
69
|
credentials can belong to the same agent.
|
|
70
70
|
|
|
71
|
-
Named profiles are optional
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
Named profiles are optional when one global default is sufficient.
|
|
72
|
+
Resolve the profile in this order: `--profile`, `ENTE_PROFILE`, the nearest
|
|
73
|
+
bound canonical ancestor of the current directory, then the global default.
|
|
74
|
+
Machine-local `bindings.json` in the Ente config directory stores folder bindings;
|
|
75
|
+
repositories carry no binding file. Symlinked folders resolve to their real path.
|
|
76
|
+
A selected missing profile fails closed. Complete API URL/key environment overrides
|
|
77
|
+
still replace stored credentials; check these separately from profile selection.
|
|
78
|
+
`auth status --json` reports `profileSource` and `boundDirectory` separately from
|
|
79
|
+
credential `source`. Bind only an existing authenticated profile:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
ente auth bind /absolute/operator/folder operator-name
|
|
83
|
+
ente auth bindings --json
|
|
84
|
+
ente auth unbind /absolute/operator/folder
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Bindings do not isolate secrets from other processes under the same OS user.
|
|
88
|
+
Use separate OS accounts or containers for that isolation. Platform keys ignore
|
|
89
|
+
folder bindings. Never store a key in a repository or project `.env` file.
|
|
90
|
+
|
|
91
|
+
Inspect the selected credential before work:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
ente auth whoami --json
|
|
95
|
+
ente agent permissions --json
|
|
96
|
+
ente agent permissions --check "Work" --action write --json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`whoami` reports the selected profile and its resolution `source`, the agent ID,
|
|
100
|
+
name, icon, mailbox, active state, home space, and live scopes. The permission
|
|
101
|
+
list includes account-visible spaces denied to the key, with `access` of `none`,
|
|
102
|
+
`read`, or `write`, and server-derived `canRead`/`canWrite` flags. Scopes and OAuth
|
|
103
|
+
consent can restrict those flags independently. Account panel visibility is
|
|
104
|
+
separate from operational access. `--check` accepts an exact space name or ID
|
|
105
|
+
and `--action read|write`; denial exits nonzero and names the web app's
|
|
106
|
+
**Agent actions** and Connections scope settings. These commands never grant
|
|
107
|
+
rights, invoke a provider, or print keys.
|
|
77
108
|
|
|
78
109
|
Verify server access with `ente entity list --limit 1 --json`.
|
|
79
110
|
|
|
@@ -150,19 +181,24 @@ ente auth login --url <convex-site-url> --key-stdin
|
|
|
150
181
|
ente auth status
|
|
151
182
|
ente auth logout
|
|
152
183
|
ente auth profiles
|
|
184
|
+
ente auth bind <path> <profile>
|
|
185
|
+
ente auth unbind <path>
|
|
186
|
+
ente auth bindings [--json]
|
|
153
187
|
|
|
154
188
|
# Search & ask
|
|
155
|
-
# Ask
|
|
189
|
+
# Ask is an experimental opt-in beta, not a general AI chat or included-model execution API.
|
|
190
|
+
# Prefer ordinary search/entity/activity commands; unavailable beta is not a provider setup task.
|
|
191
|
+
# Check the exit code and synthesisStatus; never present a failed/evidence-only result as an AI answer.
|
|
156
192
|
# Optional sourceHash/sourceFingerprint/passage metadata binds citations to a source version.
|
|
157
193
|
# query remains deterministic and never starts embedding/indexing. See guide ask-the-graph.
|
|
158
194
|
ente search "Alice" [--type person] [--space <name>] [--limit 5] [--projection compact|full] [--json]
|
|
159
|
-
ente ask "What's open with Erik?" [--space <name>] [--entity <name>] [--evidence] [--json] # AI answer + citations
|
|
195
|
+
ente ask "What's open with Erik?" [--space <name>] [--entity <name>] [--evidence] [--json] # enrolled beta only: AI answer + citations
|
|
160
196
|
ente query "QM system export" [--space <name>] [--entity <name>] [--since <epoch-ms>] [--until <epoch-ms>] [--limit 12] [--verbose] [--json] # evidence only, no AI
|
|
161
197
|
|
|
162
198
|
# Entities
|
|
163
199
|
ente entity list [--query <text>] [--type person|org|project|topic|place|object] [--space <name>] [--limit <count>] [--projection compact|full] [--archived] [--json]
|
|
164
200
|
ente entity create "Jane Doe" --type person [--pin "Acme Corp"] [--share-parents --parent-space-grant-fingerprint <token>] [--alias "JD"] [--field '{"label":"E-Mail","type":"email","value":"jane@acme.com"}'] [--tag vip] [--description "CTO at Acme"] [--json]
|
|
165
|
-
ente entity create "Leistungsphase 1" --type topic --space "Studio" --parent "Building A" [--json]
|
|
201
|
+
ente entity create "Leistungsphase 1" --type topic --space "Studio" --parent "Building A" [--parent-role "Mandant"] [--json]
|
|
166
202
|
ente entity duplicate <name-or-id> --space <space> [--name "New project"] [--include-exclusive-children] [--json]
|
|
167
203
|
ente entity get "Jane Doe" [--limit 20] [--hours-back <hours>] [--min-count 5] [--projection compact|full] [--json]
|
|
168
204
|
ente entity update "Jane Doe" [--allow-non-exclusive-children | --disallow-non-exclusive-children] [--name "Jane A. Doe"] [--alias-add "Jane"] [--alias-remove "JD"] [--field '{"label":"Job title","type":"job-title","value":"CEO"}'] [--tag vip] [--description "…"] [--json]
|
|
@@ -216,7 +252,7 @@ ente canvas html delete <boardId> <elementId> [--json]
|
|
|
216
252
|
# Entity files: the entity's linked Nextcloud folder, through YOUR own Nextcloud
|
|
217
253
|
# connection. Works only with your personal agent's key; shared agents are refused.
|
|
218
254
|
# MCP/REST: entity_files_list, entity_file_upload, entity_folder_link, entity_folder_create.
|
|
219
|
-
ente files list <entityId> [--path "03 Unterlagen"] [--json]
|
|
255
|
+
ente files list <entityId> [--path "03 Unterlagen"] [--json] # --json: linkedFolderPath = the linked folder's path from your Nextcloud root; join it with an item path for the exact file
|
|
220
256
|
ente files upload <entityId> <local-file> [--folder "03 Unterlagen"] [--name "Vertrag.pdf"] [--mime-type application/pdf] [--json] # at most 10 MiB
|
|
221
257
|
ente files upload <entityId> --activity <activityId> --storage-id <storageId> --name "Vertrag.pdf" [--folder …] [--json] # copy an activity attachment
|
|
222
258
|
ente files link <entityId> "Mandate/2026-017 Zebrafink" [--space <spaceId>] [--json]
|
|
@@ -396,7 +432,9 @@ not enter another browser's local undo stack.
|
|
|
396
432
|
For entity files, `files list` returns a `status` (`ok`, `not_linked`, `not_connected`,
|
|
397
433
|
`reconnect_required`, `no_access`, `folder_deleted`, `unreachable`, `unavailable`) instead of an
|
|
398
434
|
empty list; tell the user to connect or reconnect Nextcloud in settings rather than retrying.
|
|
399
|
-
Paths for `link`/`create-folder` are relative to the user's Nextcloud root
|
|
435
|
+
Paths for `link`/`create-folder` are relative to the user's Nextcloud root (where the space has a
|
|
436
|
+
Nextcloud space folder they must lie inside it, e.g. `Kanzlei/Mandate/2026-017`; otherwise the
|
|
437
|
+
reason is `outside_space_folder`); `--path`/`--folder`
|
|
400
438
|
are relative to the entity's linked folder. Inline uploads are limited to 10 MiB; for an
|
|
401
439
|
existing activity attachment pass `--activity` and `--storage-id` (from `activity get --json`).
|
|
402
440
|
A taken file name gets a numbered suffix, nothing is overwritten. `--space` is needed only when
|
|
@@ -568,6 +606,17 @@ at most 20 address candidates with continuation. For example:
|
|
|
568
606
|
ente agent user-mailbox --request '{"operation":"recipients","connectionId":"<permitted-private-connection>","query":"Alex Morgan"}'
|
|
569
607
|
```
|
|
570
608
|
|
|
609
|
+
When asked to write a new email from the inbox with no message selected, open
|
|
610
|
+
the draft first with one `editVisible` patch. Use an explicit address or a clear,
|
|
611
|
+
explicitly requested contact already in the authorized captured context. Otherwise
|
|
612
|
+
leave `draft.to` empty, including ambiguous, missing, incomplete or unavailable
|
|
613
|
+
matches. Keep the requested subject and body; all fields may be empty for a blank
|
|
614
|
+
email. Do not delay opening for lookup, history, provider research or clarification.
|
|
615
|
+
Never pick an arbitrary candidate. Explain an unresolved name after preparing the
|
|
616
|
+
draft. Later explicit recipient research retains the existing recency and access
|
|
617
|
+
checks. Opening and autosaving a draft never authorizes sending.
|
|
618
|
+
|
|
619
|
+
Outside inbox composition, use recipient resolution for missing requested names.
|
|
571
620
|
For interactive name resolution, add `"resolve":true` (without `cursor`). The
|
|
572
621
|
server discovers names and updates all candidate addresses in one recency pass.
|
|
573
622
|
It uses a shared ceiling of 20 cached pages of at most 200 records (4000 reads
|
|
@@ -575,7 +624,8 @@ across both passes, with a separate byte bound per page), or 4 provider pages
|
|
|
575
624
|
of at most 20 matching headers (80 fetched headers; native searches, metadata
|
|
576
625
|
requests and retries are additional network operations). It returns terminal
|
|
577
626
|
`resolutionComplete`, `discoveryComplete`, `recencyComplete` and budget metadata.
|
|
578
|
-
If incomplete or truncated, ask for an explicit address or selection
|
|
627
|
+
If incomplete or truncated, ask for an explicit address or selection before choosing
|
|
628
|
+
a recipient; this does not block opening an inbox draft with an empty recipient. Do not
|
|
579
629
|
claim uniqueness or latest contact, automatically restart resolution, or expand
|
|
580
630
|
to provider research. Preserve all requested recipients. Provider source is for
|
|
581
631
|
explicitly requested or necessary provider/older correspondence searches.
|
|
@@ -633,7 +683,7 @@ blocks. Use existing activity controls to correct thread space/owners.
|
|
|
633
683
|
|
|
634
684
|
Entity duplication copies the type, name, description, email addresses, icon and enabled bottom-bar tabs in their configured order, database columns/filters/sorts, grouping rules and the calendar-sidebar list/Kanban preference into the selected source space. It never copies activities or existing parents. `--include-exclusive-children` is the compatibility name for recursively recreating branches whose selected parent is each child’s sole regular parent already in that space with exact child names, order and aggregation settings. Selected-child grouping rules refer only to copied aggregation-enabled direct children; excluded children are dropped from the rule. Classifier-parent branches and archived children are excluded. Extra classifier links are never copied. The operation fails atomically above 100 entities including the root. Use parent context or an ID to distinguish same-named phases across projects.
|
|
635
685
|
|
|
636
|
-
`entity create --parent` atomically creates and attaches a child. Add `--exclusive-parent` to restrict it to that parent. The parent must already belong to the destination space; this path never shares it or its ancestors. Resolve same-named phases by parent context or ID. Do not combine `--parent` with `--pin`; `--pin` retains the older separate-link behavior.
|
|
686
|
+
`entity create --parent` atomically creates and attaches a child. `--parent-role "Gegner"` sets the relationship role on that link in the same write (same rule as `entity pin --role`; requires `--parent`). Add `--exclusive-parent` to restrict it to that parent. The parent must already belong to the destination space; this path never shares it or its ancestors. Resolve same-named phases by parent context or ID. Do not combine `--parent` with `--pin`; `--pin` retains the older separate-link behavior.
|
|
637
687
|
|
|
638
688
|
## Reviewed space changes
|
|
639
689
|
|
|
@@ -736,8 +786,11 @@ task and relationship retrieval without provider calls. `--mode lexical` is the
|
|
|
736
786
|
same default. Keep `ente search` for fuzzy entity lookup and `ente activity search`
|
|
737
787
|
for ordinary title/body keyword search.
|
|
738
788
|
|
|
739
|
-
|
|
740
|
-
|
|
789
|
+
Hybrid/semantic query is an experimental private opt-in beta. It is unavailable
|
|
790
|
+
for most accounts; do not change model/provider settings or repeatedly retry to
|
|
791
|
+
obtain enrollment. Use ordinary commands or lexical query instead.
|
|
792
|
+
Use `ente query "question" --mode hybrid --space Personal --json` only when
|
|
793
|
+
explicitly enrolled and semantic retrieval is wanted and consented. Hybrid retains typed deterministic structured
|
|
741
794
|
results and combines lexical/vector activity passages. `--mode semantic` returns
|
|
742
795
|
vector activity passages only, for inspection/comparison. Initial vectors cover
|
|
743
796
|
only the caller's own Personal notes, conversations, meetings and calls. Related
|
|
@@ -780,3 +833,16 @@ conflicting children, including archived or inaccessible ones, without removing
|
|
|
780
833
|
links. Legacy `--exclusive-parent` is accepted but inert after policy activation;
|
|
781
834
|
it never sets the new parent setting. Existing Space confirmation and cycle
|
|
782
835
|
rules still apply.
|
|
836
|
+
|
|
837
|
+
### Ask beta availability
|
|
838
|
+
|
|
839
|
+
Hosted `ente ask` is restricted to the existing private beta cohort. The local
|
|
840
|
+
fictional equivalent is test@example.com on a loopback backend. This is separate
|
|
841
|
+
from passage-index consent: enabling/disabling semantic retrieval does not enroll
|
|
842
|
+
another account in hosted Ask. Explicitly configured own/instance Ask model slots
|
|
843
|
+
retain their route and permissions. Ordinary paid plans do not enroll an account.
|
|
844
|
+
If unavailable, use `ente search`, `ente entity get`, `ente activity search`,
|
|
845
|
+
`ente activity list` and `ente activity get`, then summarize the returned records
|
|
846
|
+
with your agent. Default/lexical `ente query` remains available without AI.
|
|
847
|
+
`ask` returns a nonzero exit unless synthesisStatus is answered. Do not request
|
|
848
|
+
a Bedrock key, provider access or model change to repair beta unavailability.
|