@cerefox/memory 1.6.1 → 1.7.0

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.
@@ -250,30 +250,37 @@ client-facing configuration or committed to the repository.
250
250
  Cerefox classifies write operations into three tiers based on how irreversible they are.
251
251
  The access surface for each tier is **not** the same — this asymmetry is a deliberate
252
252
  architectural property, not an oversight. Future contributors should read this section
253
- before "completing" the parity table by adding purge or restore to agent-facing access
254
- paths.
253
+ before "completing" the parity table by adding purge to agent-facing access paths.
254
+
255
+ > **History**: until v1.7.0 restore sat in tier 3 with purge, on the theory that an
256
+ > agent must not be able to silently undo its own delete. The maintainer reversed
257
+ > that in #210 (2026-08-13): every delete and restore is audited with author
258
+ > attribution, restore cannot destroy content, and the CLI had `document restore`
259
+ > all along — the boundary the docs described had already outgrown the code. The
260
+ > guarded property is now exactly one thing: **no agent path to permanent purge.**
255
261
 
256
262
  ### The three tiers
257
263
 
258
264
  | Tier | Operations | Reversible? | Where exposed |
259
265
  |---|---|---|---|
260
266
  | 1. Reads + soft mutations | search, get, list-*, ingest (create/update), metadata-search, get-audit-log | n/a (reads) / yes (versioned) | All paths — MCP, Edge Functions, CLI, web UI |
261
- | 2. Soft-destructive | `delete_document` (soft delete to trash), `set_review_status` | yes — restorable via web UI | All paths (CLI: `cerefox document delete`; web UI; **not** MCP or Edge Functions today) |
262
- | 3. **Hard-destructive** | `purge_document` (permanent), `restore_document` (un-trash), `set_version_archived` (toggle version retention) | no (purge) / yes (restore, but recovers from a destructive action) | **Web UI only** |
267
+ | 2. Soft-destructive + recovery | `delete_document` (soft delete to trash), `restore_document` (un-trash), `set_review_status` | yes — delete is restorable; restore recovers | CLI (`cerefox document delete` / `restore`), web UI, and — since v1.7.0 (#208, #210) — MCP (`cerefox_delete_document`, which requires the caller's read-hash, and `cerefox_restore_document`). **Not** the primitive GPT-Actions Edge Functions (deliberately deferred). |
268
+ | 3. **Hard-destructive** | `purge_document` (permanent), `set_version_archived` (toggle version retention) | no (purge) | **Web UI only** |
263
269
 
264
- ### Why purge / restore are web-UI-only
270
+ ### Why purge is web-UI-only
265
271
 
266
272
  The recovery story behind Cerefox depends on a **human-in-the-loop confirmation step
267
- before irreversible action.** Soft-delete on its own is not enough an agent that
268
- mistakenly soft-deletes a document needs to be unable to silently restore the same
269
- document later (covering its tracks), and certainly unable to escalate from soft-delete
270
- to permanent purge.
273
+ before irreversible action.** Everything an agent can dowrite, soft-delete,
274
+ restore is reversible and audited; the one action that destroys data outright is
275
+ reserved for a human who has just looked at what they are about to destroy.
271
276
 
272
277
  So the access model is:
273
278
 
274
- 1. **An agent (via MCP, Edge Function, or CLI) can write or soft-delete freely.** Every
275
- such operation is recorded in `cerefox_audit_log` with `author`, `author_type`, and
276
- `created_at`. Soft-deleted documents land in trash and are excluded from search.
279
+ 1. **An agent (via MCP, Edge Function, or CLI) can write, soft-delete, and restore
280
+ freely.** Every such operation is recorded in `cerefox_audit_log` with `author`,
281
+ `author_type`, and `created_at`. Soft-deleted documents land in trash and are
282
+ excluded from search; a restore puts them back and is itself an audit event, so
283
+ a delete-then-restore leaves a visible trail rather than silence.
277
284
  2. **A human reviews the trash through the Cerefox web UI.** They see the audit history
278
285
  for each document, decide whether the agent's action was correct, and either restore
279
286
  the document or — only after seeing what they're about to destroy — purge it.
@@ -296,9 +303,11 @@ If you're building tooling that uses the CLI (Path C) or any MCP/Edge Function p
296
303
  - **Surface the soft-delete to the user.** When your agent decides to delete something,
297
304
  tell the user explicitly: "I soft-deleted X (recoverable from the Cerefox trash in
298
305
  the web UI)." This gives them the visibility to review and either restore or commit.
299
- - **Do not attempt to purge or restore from agent code.** There is intentionally no
300
- programmatic path. If your workflow needs purge / restore, that workflow needs human
301
- intervention the design is correct, not incomplete.
306
+ - **Do not attempt to purge from agent code.** There is intentionally no programmatic
307
+ path to permanent deletion — if your workflow needs purge, that workflow needs human
308
+ intervention. Restore, by contrast, is freely available since v1.7.0
309
+ (`cerefox_restore_document` over MCP, `cerefox document restore` on the CLI), audited
310
+ like every other write.
302
311
 
303
312
  ### CLI delete-doc — interactive vs scripted
304
313
 
@@ -351,10 +351,13 @@ cerefox document set-projects <doc-id> --clear
351
351
 
352
352
  | Flag | Type | Default | Description |
353
353
  |---|---|---|---|
354
+ | `--reason <text>` | str | _none_ | Optional reason recorded on the restore audit entry (v1.7.0; needs schema 0.12.0). |
354
355
  | `--author TEXT` | str | `CEREFOX_AUTHOR_NAME` or `unknown` | Identity recorded in the audit log. |
355
356
  | `--author-type [user\|agent]` | choice | `CEREFOX_AUTHOR_TYPE` or `user` | Caller type. |
356
357
 
357
- Clears `deleted_at`, returning the document to search and `cerefox document list`, and writes a `restore` audit entry.
358
+ Clears `deleted_at`, returning the document to search and `cerefox document list`, and writes a `restore` audit entry. Restoring a document that is not deleted (or was already restored by a concurrent writer) is a reported no-op.
359
+
360
+ **MCP equivalent**: `cerefox_restore_document` (v1.7.0).
358
361
 
359
362
  ---
360
363
 
@@ -521,7 +524,7 @@ cerefox audit list --json --limit 1000 | jq 'select(.author_type == "agent")'
521
524
 
522
525
  ### `cerefox document delete`
523
526
 
524
- **Purpose**: **soft-delete** a document — moves it to trash, recoverable. The CLI cannot permanently delete or restore; see [Destructive operations and the trust model](access-paths.md#destructive-operations-and-the-trust-model) for the rationale.
527
+ **Purpose**: **soft-delete** a document — moves it to trash, recoverable with `cerefox document restore`. The CLI cannot permanently purge; see [Destructive operations and the trust model](access-paths.md#destructive-operations-and-the-trust-model) for the rationale.
525
528
 
526
529
  **Synopsis**: `cerefox document delete [OPTIONS] DOCUMENT_ID`
527
530
 
@@ -530,7 +533,7 @@ cerefox audit list --json --limit 1000 | jq 'select(.author_type == "agent")'
530
533
  | Flag | Type | Default | Description |
531
534
  |---|---|---|---|
532
535
  | `--yes` | flag | off | Skip confirmation prompt. Required for non-interactive use (agents, scripts). |
533
- | `--reason <text>` | str | _none_ | Optional reason recorded on the delete audit entry. |
536
+ | `--reason <text>` | str | _none_ | Optional reason recorded on the delete audit entry (v1.7.0; needs schema 0.12.0). |
534
537
  | `--author <name>` (`-a`) | str | `CEREFOX_AUTHOR_NAME` or `unknown` | Identity recorded in the audit log. |
535
538
  | `--author-type <type>` | `user`\|`agent` | `CEREFOX_AUTHOR_TYPE` or `user` | Caller type, recorded in the audit log. |
536
539
 
@@ -544,7 +547,7 @@ cerefox audit list --json --limit 1000 | jq 'select(.author_type == "agent")'
544
547
  - Does NOT free database storage.
545
548
  - Versions, chunks, and audit entries remain intact under the trash.
546
549
 
547
- **Recovery**: a soft-deleted document can be restored OR permanently purged **only from the Cerefox web UI** (Trash view). These destructive / restorative actions are intentionally web-UI-only to require human-in-the-loop confirmation. See [`access-paths.md` → Destructive operations and the trust model](access-paths.md#destructive-operations-and-the-trust-model).
550
+ **Recovery**: restore with `cerefox document restore`, the web UI Trash view, or `cerefox_restore_document` over MCP (v1.7.0). Permanent purge is **web-UI-only** the one action requiring human-in-the-loop confirmation. A trashed document also refuses content updates (restore first). See [`access-paths.md` → Destructive operations and the trust model](access-paths.md#destructive-operations-and-the-trust-model).
548
551
 
549
552
  **Agent usage**:
550
553
  ```bash
@@ -664,7 +667,7 @@ cerefox config set relations_enabled true # tools appear in every agent's lis
664
667
  cerefox config set relations_enabled false # hidden again; no data removed
665
668
  ```
666
669
 
667
- Agents see 13 tools with the flag off and 16 with it on. See
670
+ Agents see 15 tools with the flag off and 19 with it on. See
668
671
  [`configuration.md`](configuration.md) for the full runtime-config surface.
669
672
 
670
673
  ### `cerefox config list` / `cerefox config get` / `cerefox config set`
@@ -782,6 +785,9 @@ Every MCP parameter has an exact-name CLI flag (kebab-cased). Short forms exist
782
785
  | `cerefox_list_metadata_keys()` | `cerefox metadata keys` |
783
786
  | `cerefox_metadata_search(metadata_filter, project_name, updated_since, created_since, limit, include_content, requestor)` | `cerefox metadata search --metadata-filter '<json>' --project-name <n> --updated-since <iso> --created-since <iso> --limit N --include-content --requestor <name>` |
784
787
  | `cerefox_get_audit_log(document_id, author, operation, since, until, limit, requestor)` | `cerefox audit list --document-id <id> --author <a> --operation <op> --since <iso> --until <iso> --limit N --requestor <name>` |
788
+ | `cerefox_set_document_metadata(document_id, metadata, replace, author)` | `cerefox document set-metadata <id> --set key=value` (also `--remove key`, `--json '<json>'`, `--replace`) |
789
+ | `cerefox_delete_document(document_id, expected_content_hash, reason, author, requestor)` | `cerefox document delete <id> --reason <text> --author <a> --author-type <t> --yes` (confirms interactively instead of requiring the hash) |
790
+ | `cerefox_restore_document(document_id, reason, author, requestor)` | `cerefox document restore <id> --reason <text> --author <a> --author-type <t>` |
785
791
 
786
792
  ## CLI ↔ MCP parity matrix
787
793
 
@@ -800,8 +806,8 @@ surface).
800
806
  | `document get` | `cerefox_get_document` | ✅ |
801
807
  | `document list` | `cerefox_metadata_search` (scope by `project_name` / metadata / time) | ✅ as of this change. Unscoped whole-KB listing has no MCP path by design (scope it) |
802
808
  | `document edit` (title / metadata in place) | — | 🔒 intentional: a human/web-parity convenience. Agents update title+metadata deterministically via `cerefox_ingest` (with `document_id`); a metadata-only edit isn't a needed agent primitive |
803
- | `document delete` (soft-delete) | | 🔒 destructive; trust model keeps delete/restore on CLI + web only |
804
- | `document restore` | | 🔒 trust model (CLI + web only) |
809
+ | `document delete` (soft-delete) | `cerefox_delete_document` | v1.7.0 (#208). MCP requires the caller's read-hash; the CLI confirms interactively instead |
810
+ | `document restore` | `cerefox_restore_document` | v1.7.0 (#210). Permanent purge remains web-UI-only |
805
811
  | `document version list` | `cerefox_list_versions` | ✅ |
806
812
  | `document version archive` / `unarchive` | — | 🔒 intentional: version-retention protection is exposed only to CLI + web (a maintenance concern, not an agent primitive) |
807
813
  | `document set-projects` | `cerefox_set_document_projects` | ✅ full-set replace of a document's project memberships (shared core; `--clear` to remove all) |
@@ -72,7 +72,7 @@ in the container.
72
72
  - **Easiest:** `cerefox-local configure-agent` wires it up (registers an MCP server named
73
73
  `cerefox-local` with Claude Code if the `claude` CLI is present, else prints the snippet).
74
74
  - **Manual:** point the client at `command: cerefox-local, args: ["mcp"]` (stdio). That proxies
75
- to `cerefox mcp` in the container; the same 13 core tools, identical behavior to every other path.
75
+ to `cerefox mcp` in the container; the same 15 core tools, identical behavior to every other path.
76
76
  - The cloud paths above (remote Edge Function, GPT Actions) **do not apply** to a local-only
77
77
  install — there are no Edge Functions.
78
78
 
@@ -131,7 +131,7 @@ in the container.
131
131
 
132
132
  ### What it is
133
133
 
134
- The local Cerefox MCP server runs on your machine and exposes the same 13 core tools as the remote
134
+ The local Cerefox MCP server runs on your machine and exposes the same 15 core tools as the remote
135
135
  Edge Function, communicating with clients over stdio.
136
136
 
137
137
  The local server ships as an npm package — **[`@cerefox/memory`](https://www.npmjs.com/package/@cerefox/memory)** — built with the official `@modelcontextprotocol/sdk`.
@@ -190,6 +190,10 @@ Once configured, every Path A client has these tools:
190
190
  |------|-------------|
191
191
  | `cerefox_search` | Hybrid (FTS + semantic) document-level search. Filter by `project_name` or `metadata_filter`. |
192
192
  | `cerefox_ingest` | Save a note or document to the knowledge base. Pass `document_id` to update by ID (deterministic); or `update_if_exists: true` to update by title match. Accepts optional `author` and `project_name`. |
193
+ | `cerefox_insert` | Add text to a document without resending it (additive only — structurally cannot remove content) |
194
+ | `cerefox_edit` | Change parts of a document: 1..n operations (`insert`/`replace_section`/`delete_section`/`rename_section`) applied atomically |
195
+ | `cerefox_delete_document` | Soft-delete a document to the trash (requires the caller's read-hash; permanent purge is web-UI-only) |
196
+ | `cerefox_restore_document` | Restore a soft-deleted document from the trash (audited inverse of delete) |
193
197
  | `cerefox_list_metadata_keys` | List all metadata keys in use across documents |
194
198
  | `cerefox_get_document` | Retrieve the full content of a document (current or archived version) |
195
199
  | `cerefox_list_versions` | List all archived versions of a document |
@@ -200,9 +204,13 @@ Once configured, every Path A client has these tools:
200
204
  | `cerefox_set_document_projects` | Set a document's project memberships to exactly the given list (destructive replace; metadata-only, no content change). Use `cerefox_ingest` with singular `project_name` for non-destructive "add". |
201
205
  | `cerefox_get_help` | Retrieve Cerefox conventions (the same content as `AGENT_QUICK_REFERENCE.md`) over MCP. Optional `topic` parameter does a case-insensitive H2 substring match. Call this whenever you are uncertain. |
202
206
 
203
- > All 13 core tools are available on both Path A (local and remote MCP) and Path B (GPT Actions
204
- > via dedicated Edge Functions, except `cerefox_get_help` which is MCP-only). MCP tools use
205
- > `project_name` (human-readable); primitive Edge Functions (Path B) use `project_id` (UUID).
207
+ > All 15 core tools are available on Path A (local and remote MCP). Path B (GPT Actions via
208
+ > dedicated Edge Functions) exposes the 8 primitive operations: search, ingest, metadata keys,
209
+ > get-document, list-versions, audit log, metadata-search, and list-projects. The rest are
210
+ > MCP-only: the partial-edit tools (`cerefox_insert`/`cerefox_edit`),
211
+ > `cerefox_delete_document`/`cerefox_restore_document`, the metadata/project setters, and
212
+ > `cerefox_get_help`. MCP tools use `project_name` (human-readable); primitive Edge
213
+ > Functions (Path B) use `project_id` (UUID).
206
214
 
207
215
  ### Path A system prompt
208
216
 
@@ -226,7 +234,8 @@ For the full tool reference, search Cerefox for "How AI Agents Use Cerefox".
226
234
  After setup, ask your client:
227
235
 
228
236
  > "What tools do you have available?"
229
- > Expected: 13 tools listed (`cerefox_search`, `cerefox_ingest`, `cerefox_insert`, `cerefox_edit`, `cerefox_get_document`,
237
+ > Expected: 15 tools listed (`cerefox_search`, `cerefox_ingest`, `cerefox_insert`, `cerefox_edit`,
238
+ > `cerefox_delete_document`, `cerefox_restore_document`, `cerefox_get_document`,
230
239
  > `cerefox_list_versions`, `cerefox_list_projects`, `cerefox_list_metadata_keys`,
231
240
  > `cerefox_metadata_search`, `cerefox_set_document_projects`,
232
241
  > `cerefox_set_document_metadata`, `cerefox_get_audit_log`,
@@ -321,7 +330,7 @@ pick it up automatically.
321
330
  to primitive Edge Functions. This means each MCP tool call costs a single Edge Function
322
331
  invocation.
323
332
 
324
- A single HTTPS URL gives any remote-capable MCP client all 13 core tools with full hybrid
333
+ A single HTTPS URL gives any remote-capable MCP client all 15 core tools with full hybrid
325
334
  search -- no Python, no `uv`, no local repository clone needed.
326
335
 
327
336
  **URL format:**
@@ -502,7 +511,7 @@ Replace `<your-project-ref>` with your Supabase project ref.
502
511
  **Step 3 — Verify:**
503
512
 
504
513
  Launch Codex and use the `/mcp` slash command to confirm the `cerefox` server is connected
505
- and all 13 tools are listed.
514
+ and all 15 tools are listed.
506
515
 
507
516
  **Notes:**
508
517
  - `bearer_token_env_var` is the **name** of the env var (e.g. `"CEREFOX_ACCESS_TOKEN"`), not the
@@ -588,7 +597,11 @@ When UPDATING an existing document, first call getDocument and note its
588
597
  content_hash, then pass it as expected_content_hash on ingestNote. If you get a
589
598
  409 conflict, the document changed underneath you: call getDocument again, merge
590
599
  your changes into the latest content, and retry with the new hash — never
591
- overwrite blindly.
600
+ overwrite blindly. A 409 with error "document_deleted" means the target is in
601
+ the trash: it must be restored by the user before updating. A 422 with error
602
+ "unresolved_links" means the content links document id(s) that do not exist —
603
+ you mangled a UUID; re-check each [Text](uuid) link against its source and
604
+ resend, or wrap example ids in backticks. Do not retry either unchanged.
592
605
  ```
593
606
 
594
607
  ### Path B verification
@@ -625,7 +638,7 @@ In the action editor, paste this schema (replace `<your-project-ref>`):
625
638
  openapi: 3.1.0
626
639
  info:
627
640
  title: Cerefox Knowledge Base
628
- version: 3.1.0
641
+ version: 3.2.0
629
642
  servers:
630
643
  - url: https://<your-project-ref>.supabase.co/functions/v1
631
644
  paths:
@@ -807,9 +820,20 @@ paths:
807
820
  with its content_hash.
808
821
  '409':
809
822
  description: >
810
- Conflict the document changed since it was read. Call getDocument
811
- for the latest content + content_hash, merge your changes, and
812
- retry with the new hash. Do not overwrite blindly.
823
+ Conflict. Either the document changed since it was read (call
824
+ getDocument for the latest content + content_hash, merge your
825
+ changes, and retry with the new hash do not overwrite blindly),
826
+ or the target document is soft-deleted (error
827
+ "document_deleted") — restore it first, then retry, or create a
828
+ new document.
829
+ '422':
830
+ description: >
831
+ Unresolved document links (error "unresolved_links") — the content
832
+ contains [Text](uuid) links to document ids that do not exist,
833
+ almost always mangled UUIDs. Re-read the source each link was
834
+ copied from, correct the id(s), and resend; do not retry
835
+ unchanged. Deliberate example ids belong in code formatting
836
+ (backticks), which is not validated.
813
837
  /cerefox-metadata:
814
838
  post:
815
839
  operationId: listMetadataKeys
@@ -1151,7 +1175,7 @@ user + `CEREFOX_OAUTH_OWNER_ID` pin, and register the Claude OAuth App
1151
1175
  Client Secret from the pre-registered OAuth App (setup-supabase Step 7d).
1152
1176
  5. Save. Claude runs the OAuth flow → redirects you to the **Cerefox consent page** (sign
1153
1177
  in with the owner email/password from Step 7c, then **Allow**) → returns to Claude. The
1154
- connector shows as connected with **13 tools** (16 if you have enabled document relations). (If you've approved before, Supabase
1178
+ connector shows as connected with **15 tools** (19 if you have enabled document relations). (If you've approved before, Supabase
1155
1179
  auto-consents and the page just flashes through — that's expected.)
1156
1180
  6. **Mobile**: connectors are account-level, so `CerefoxMCP` appears in the Claude mobile
1157
1181
  app automatically — run one search from your phone to confirm.
@@ -1253,7 +1277,7 @@ The agent docs are written around MCP tool names. **CLI flag names match MCP par
1253
1277
  | `cerefox_metadata_search` | `cerefox metadata search --metadata-filter '<json>' --project-name <n> --requestor <name>` |
1254
1278
  | `cerefox_get_audit_log` | `cerefox audit list --document-id <id> --author <a> --operation <op> --since <iso> --until <iso> --limit N --json --requestor <name>` |
1255
1279
 
1256
- > CLI verbs with no MCP equivalent: `cerefox document edit`, `cerefox document restore`, `cerefox project create` / `cerefox project edit`, `cerefox config list`.
1280
+ > CLI verbs with no MCP equivalent: `cerefox document edit`, `cerefox project create` / `cerefox project edit`, `cerefox config list`.
1257
1281
 
1258
1282
  ### Path C verification prompts
1259
1283
 
@@ -1272,8 +1296,8 @@ After pointing your agent at the repo, ask it:
1272
1296
 
1273
1297
  - **Privilege level**: the CLI uses the **service-role key** (`CEREFOX_SUPABASE_KEY`), which bypasses Row Level Security. An agent with Bash access has the same full read/write power you do. Only enable Path C for agents you trust to act on your behalf — the same trust level you'd grant Cursor/Claude Code for editing your source code.
1274
1298
  - **Audit attribution**: Path C records `access_path = "cli"` in usage logs, distinct from `"local-mcp"` / `"remote-mcp"`. **Agents must set `--author <name> --author-type agent` on writes and `--requestor <name>` on reads** (or rely on `CEREFOX_AUTHOR_NAME` / `CEREFOX_AUTHOR_TYPE` / `CEREFOX_REQUESTOR_NAME` env vars). Without these flags, writes attribute to `"unknown"` / `"user"`, which under-reports agent activity. See the 2026-05-18 Decision Log Q2 entry for the design rationale (`author_type` is caller-declared on ambiguous channels — CLI and Edge Functions — but `access_path` is always derived from the code layer).
1275
- - **Soft-delete is reachable; purge and restore are not** — by design. `cerefox document delete` is exposed on the CLI and sends documents to trash with an audit entry. **Permanent purge** (irreversible) and **restore from trash** (un-doing a destructive action) are intentionally web-UI-only and require human-in-the-loop confirmation. If an agent on Path C decides to delete content, it should surface that to the user explicitly so they can review and either restore or commit. See [`access-paths.md` → Destructive operations and the trust model](access-paths.md#destructive-operations-and-the-trust-model) for the full rationale and contributor guidance.
1276
- - **Cross-doc links in content you ingest** become clickable when the user views them in the Cerefox web UI. Author them as `[Text](uuid)` (most stable), `[Text](docs/path.md)` (repo files), or `[Text](<Title With Spaces>)` (angle-bracket form bare spaces break markdown). See [`AGENT_GUIDE.md` → "Writing linkable content"](../../AGENT_GUIDE.md#writing-linkable-content) for the full set of rules.
1299
+ - **Soft-delete and restore are reachable; permanent purge is not** — by design. `cerefox document delete` / `cerefox document restore` on the CLI, `cerefox_delete_document` / `cerefox_restore_document` over MCP (v1.7.0, #208/#210): both audited with author attribution. **Permanent purge** (irreversible) stays web-UI-only with human-in-the-loop confirmation. If an agent deletes or restores content, it should surface that to the user explicitly so they can follow it in the audit trail. See [`access-paths.md` → Destructive operations and the trust model](access-paths.md#destructive-operations-and-the-trust-model) for the full rationale and contributor guidance.
1300
+ - **Cross-doc links in content you ingest** become clickable when the user views them in the Cerefox web UI. **Always author them as `[Text](uuid)`** — the server validates these on every write (v1.7.0) and rejects links to nonexistent ids, which catches mangled UUIDs at write time. `[Text](docs/path.md)` exists for repo-ingested files; do not write title-based links (fragile, and `AGENT_GUIDE.md` says never in agent-authored content). See [`AGENT_GUIDE.md` → "Writing linkable content"](../../AGENT_GUIDE.md#writing-linkable-content) for the full set of rules.
1277
1301
  - **CLI install per machine**: the agent needs the `cerefox` binary installed (`npm install -g @cerefox/memory`) with a resolvable `.env`. If you skip the local install entirely, Path A-Remote or Path B is the only option.
1278
1302
  - **No sandboxing beyond the agent's existing Bash sandbox**: the CLI is just shell. If your agent's tool framework restricts which commands run, allowlist `cerefox …` explicitly.
1279
1303
 
@@ -74,7 +74,7 @@ paths go through **Edge Functions**, which the free tier caps at 500,000/month:
74
74
  500K/month is generous for a single human-driven agent. But **automated or
75
75
  high-frequency agents on the remote path** can approach it. The lever: point those
76
76
  agents at the **local stdio MCP server** (`cerefox mcp`) instead of the remote Edge
77
- Function — it exposes the identical 13 core tools (plus the 4 relation tools when enabled), talks to the Data API directly, and
77
+ Function — it exposes the identical 15 core tools (plus the 4 relation tools when enabled), talks to the Data API directly, and
78
78
  costs **zero** Edge Function invocations (bonus: lower latency, and it works offline
79
79
  against a reachable database). If you do exceed the free EF quota, Supabase's Pro
80
80
  plan ($25/mo, 2M invocations included) is the next step.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cerefox/memory",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "description": "Cerefox — user-owned shared memory for AI agents. CLI + stdio MCP server + web UI + ingestion for a knowledge base on your own Supabase project (or fully self-hosted with Cerefox Local).",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/fstamatelopoulos/cerefox",