@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.
- package/AGENT_GUIDE.md +79 -5
- package/AGENT_QUICK_REFERENCE.md +9 -7
- package/README.md +5 -3
- package/dist/bin/cerefox.js +591 -227
- package/dist/frontend/assets/index-D8E0mTnp.js +121 -0
- package/dist/frontend/assets/index-D8E0mTnp.js.map +1 -0
- package/dist/frontend/index.html +1 -1
- package/dist/server-assets/_shared/ef-meta/index.ts +3 -3
- package/dist/server-assets/_shared/mcp-tools/_utils.ts +41 -0
- package/dist/server-assets/_shared/mcp-tools/delete-document.ts +181 -0
- package/dist/server-assets/_shared/mcp-tools/get-help-content.ts +4 -4
- package/dist/server-assets/_shared/mcp-tools/index.ts +8 -1
- package/dist/server-assets/_shared/mcp-tools/ingest.ts +75 -8
- package/dist/server-assets/_shared/mcp-tools/partial-edits.ts +43 -4
- package/dist/server-assets/_shared/mcp-tools/restore-document.ts +130 -0
- package/dist/server-assets/db/migrations/0024_mcp_delete_document.sql +26 -0
- package/dist/server-assets/db/rpcs.sql +207 -27
- package/dist/server-assets/db/schema.sql +1 -1
- package/dist/server-assets/supabase/functions/cerefox-ingest/index.ts +26 -0
- package/docs/guides/access-paths.md +24 -15
- package/docs/guides/cli.md +13 -7
- package/docs/guides/connect-agents.md +41 -17
- package/docs/guides/operational-cost.md +1 -1
- package/package.json +1 -1
- package/dist/frontend/assets/index-OqloGFwv.js +0 -121
- package/dist/frontend/assets/index-OqloGFwv.js.map +0 -1
|
@@ -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
|
|
254
|
-
|
|
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
|
|
262
|
-
| 3. **Hard-destructive** | `purge_document` (permanent), `
|
|
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
|
|
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.**
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
to permanent purge.
|
|
273
|
+
before irreversible action.** Everything an agent can do — write, 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
|
|
275
|
-
such operation is recorded in `cerefox_audit_log` with `author`,
|
|
276
|
-
`created_at`. Soft-deleted documents land in trash and are
|
|
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
|
|
300
|
-
|
|
301
|
-
intervention
|
|
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
|
|
package/docs/guides/cli.md
CHANGED
|
@@ -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
|
|
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**:
|
|
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
|
|
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) |
|
|
804
|
-
| `document restore` |
|
|
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
|
|
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
|
|
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
|
|
204
|
-
>
|
|
205
|
-
>
|
|
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:
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
811
|
-
for the latest content + content_hash, merge your
|
|
812
|
-
retry with the new hash
|
|
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 **
|
|
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
|
|
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
|
|
1276
|
-
- **Cross-doc links in content you ingest** become clickable when the user views them in the Cerefox web UI.
|
|
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
|
|
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.
|
|
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",
|