A portable, self-hosted memory plane for AI agents — one core across API, MCP, CLI, and UI.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
mem_archive
Reversibly exclude a memory from normal recall
-
mem_checkpoint
Persist a versioned task checkpoint or an explicit handoff to another Agent/device
-
mem_checkpoint_get
Get one immutable checkpoint and its full handoff payload
-
mem_checkpoint_list
List newest-first bounded checkpoint summaries for one task
-
mem_context
Build an evidence-backed context pack for the calling Agent
-
mem_durable_context_recall
Resume explicitly granted, workspace-scoped active memories for one principal
-
mem_face
Person clusters: action=list / name / merge
-
mem_feedback
Record useful/not-useful or pin/unpin feedback with optimistic concurrency
-
mem_file_annotation_decide
Accept or reject one pending AI description/tag suggestion
-
mem_folder_tree
Full folder tree as nested structure
-
mem_forget
Irreversibly redact one live memory payload after explicit confirmation
-
mem_get
Read file content; binary returned base64-encoded, capped at 4 MiB
-
mem_info
File metadata + AI fields (caption / summary / tags / timeline_at / index_status)
-
mem_list
List files with filters (tag / mime-prefix / since / until / path-prefix)
-
mem_ls
List immediate subfolders + files under a folder path
-
mem_memory_get
Get one full structured memory by UUID within the token path boundary
-
mem_memory_list
List bounded structured-memory summaries
-
mem_mkdir
Create folder (mkdir -p semantics)
-
mem_mv
Move file to a different folder, or rename in place
-
mem_put
Upload content (text or base64 binary) and trigger AI indexing
-
mem_related
Top-K files related to a file_id by embedding similarity
-
mem_remember
Idempotently persist an observation, decision, preference, task state, fact, note or artifact reference
-
mem_restore
Return an archived memory to normal recall
-
mem_resume
Restore the current task head or a selected historical checkpoint
-
mem_search
Natural-language search (text / visual / auto fuse); ranked files + snippets
-
mem_task_list
List bounded resumable-task summaries
analyzed commit 10d4bf7 · analyzer v33 · 3d ago
skills & prompt files 1
- agent-rules bytefolk-mem-10d4bf7/AGENTS.md
code files: 429
filesystem 13
- fs (weak) bytefolk-mem-10d4bf7/npm/clean-tarball.test.js :17
} = require("node:fs"); - fs bytefolk-mem-10d4bf7/npm/install.js :25
} = require("fs"); - fs (weak) bytefolk-mem-10d4bf7/npm/install.test.js :17
} = require("node:fs"); - fs (weak) bytefolk-mem-10d4bf7/npm/mem-mcp.test.js :6
const { mkdtempSync, readdirSync, rmSync } = require("node:fs"); - fs (weak) bytefolk-mem-10d4bf7/npm/windows-shim.test.js :14
} = require("node:fs"); - fs bytefolk-mem-10d4bf7/web/acceptance.mjs :3
import { mkdirSync, readdirSync } from 'node:fs'; - fs bytefolk-mem-10d4bf7/web/e2e-smoke.mjs :4
import { mkdirSync } from 'node:fs'; - fs bytefolk-mem-10d4bf7/web/enrichment-acceptance.mjs :3
import { mkdir } from 'node:fs/promises'; - fs bytefolk-mem-10d4bf7/web/localization-acceptance.mjs :3
import { mkdir } from 'node:fs/promises'; - fs bytefolk-mem-10d4bf7/web/localization-audit.mjs :2
import { readdir, readFile } from 'node:fs/promises'; - fs bytefolk-mem-10d4bf7/web/memory-acceptance.mjs :3
import { mkdir } from 'node:fs/promises'; - fs bytefolk-mem-10d4bf7/web/theme-acceptance.mjs :3
import { mkdir } from 'node:fs/promises'; - fs bytefolk-mem-10d4bf7/web/transfer-acceptance.mjs :3
import { mkdir, readFile } from 'node:fs/promises';
shell / exec 9
- shell (weak) bytefolk-mem-10d4bf7/npm/clean-tarball.test.js :4
const { spawnSync } = require("node:child_process"); - shell (weak) bytefolk-mem-10d4bf7/npm/install.test.js :4
const { spawn } = require("node:child_process"); - shell (weak) bytefolk-mem-10d4bf7/npm/mem-mcp.test.js :5
const { spawn } = require("node:child_process"); - shell (weak) bytefolk-mem-10d4bf7/npm/windows-shim.test.js :4
const { spawnSync } = require("node:child_process"); - shell bytefolk-mem-10d4bf7/web/enrichment-acceptance.mjs :2
import { spawn } from 'node:child_process'; - shell bytefolk-mem-10d4bf7/web/localization-acceptance.mjs :2
import { spawn } from 'node:child_process'; - shell bytefolk-mem-10d4bf7/web/memory-acceptance.mjs :2
import { spawn } from 'node:child_process'; - shell bytefolk-mem-10d4bf7/web/theme-acceptance.mjs :2
import { spawn } from 'node:child_process'; - shell bytefolk-mem-10d4bf7/web/transfer-acceptance.mjs :2
import { spawn } from 'node:child_process';
network 10
- net (weak) bytefolk-mem-10d4bf7/npm/clean-tarball.test.js :173
const https = require("node:https"); - net bytefolk-mem-10d4bf7/npm/install.js :26
const { get } = require("https"); - net (weak) bytefolk-mem-10d4bf7/npm/windows-shim.test.js :109
const https = require("node:https"); - net bytefolk-mem-10d4bf7/web/enrichment-acceptance.mjs :54
const response = await fetch(baseURL); - net bytefolk-mem-10d4bf7/web/localization-acceptance.mjs :43
const response = await fetch(baseURL); - net bytefolk-mem-10d4bf7/web/memory-acceptance.mjs :50
const response = await fetch(baseURL); - net bytefolk-mem-10d4bf7/web/src/lib/api.ts :112
const res = await fetch(url, { - net bytefolk-mem-10d4bf7/web/src/pages/FileDetailPage.tsx :705
fetch(url) - net bytefolk-mem-10d4bf7/web/theme-acceptance.mjs :42
const response = await fetch(baseURL); - net bytefolk-mem-10d4bf7/web/transfer-acceptance.mjs :44
const response = await fetch(baseURL);
declared dependencies 39
- github.com/go-chi/chi/v5@v5.3.0
- github.com/google/uuid@v1.6.0
- github.com/hibiken/asynq@v0.26.0
- github.com/jackc/pgx/v5@v5.9.2
- github.com/minio/minio-go/v7@v7.0.77
- github.com/pressly/goose/v3@v3.22.1
- github.com/spf13/cobra@v1.8.1
- golang.org/x/crypto@v0.54.0
- golang.org/x/sys@v0.47.0
- golang.org/x/term@v0.45.0
- google.golang.org/grpc@v1.82.1
- google.golang.org/protobuf@v1.36.11
- gopkg.in/yaml.v3@v3.0.1
- github.com/cespare/xxhash/v2@v2.3.0
- github.com/dgryski/go-rendezvous@v0.0.0-20200823014737-9f7001d12a5f
- github.com/dustin/go-humanize@v1.0.1
- github.com/go-ini/ini@v1.67.0
- github.com/goccy/go-json@v0.10.3
- github.com/inconshreveable/mousetrap@v1.1.0
- github.com/jackc/pgpassfile@v1.0.0
- github.com/jackc/pgservicefile@v0.0.0-20240606120523-5a60cdf6a761
- github.com/jackc/puddle/v2@v2.2.2
- github.com/klauspost/compress@v1.18.5
- github.com/klauspost/cpuid/v2@v2.2.11
- github.com/mfridman/interpolate@v0.0.2
- github.com/minio/md5-simd@v1.1.2
- github.com/redis/go-redis/v9@v9.14.1
- github.com/robfig/cron/v3@v3.0.1
- github.com/rogpeppe/go-internal@v1.14.1
- github.com/rs/xid@v1.6.0
- github.com/sethvargo/go-retry@v0.3.0
- github.com/spf13/cast@v1.10.0
- github.com/spf13/pflag@v1.0.9
- go.uber.org/multierr@v1.11.0
- golang.org/x/net@v0.57.0
- golang.org/x/sync@v0.22.0
- golang.org/x/text@v0.40.0
- golang.org/x/time@v0.14.0
- google.golang.org/genproto/googleapis/rpc@v0.0.0-20260414002931-afd174a4e478
obfuscation 3
- dynamic require()/import() bytefolk-mem-10d4bf7/npm/install.test.js :379
const { install } = require(${JSON.stringify(installPath)}); - base64 decode → exec sink bytefolk-mem-10d4bf7/npm/install.test.js :380
const bytes = Buffer.from(${JSON.stringify(bytes.toString("base64"))}, "base64"); - dynamic require()/import() bytefolk-mem-10d4bf7/npm/mem-mcp.test.js :121
const { runProcess } = require(${JSON.stringify(wrapperPath)});