MemoFSMemoFS
API Reference

@memofs/cli API Reference

Comprehensive technical API reference for @memofs/cli: runner, config writers, error hierarchy, protocol constants, and output formatters.

The @memofs/cli package exports its programmatic runner, configuration generator, error classes, protocol constants, output writers, and memory filesystem inspection utilities.

Package Subpaths

// Primary entry point (Node.js runtime)
import {
  runMemoFsCli,
  createMemoFSFromCli,
  writeDefaultCliConfig,
  resolveSchemaPath,
  inspectMemoFs,
  CliError,
  CliUsageError,
} from "@memofs/cli";

// JSON Schema for .memofs/config.json
import configSchema from "@memofs/cli/schema/config.json" with { type: "json" };

1. CLI Runner & Client Factory

runMemoFsCli(input: RunMemoFSCliInput): Promise<RunMemoFSCliResult>

Executes the MemoFS CLI command pipeline programmatically using Commander, routing stdout and stderr to the output collector.

import { runMemoFsCli } from "@memofs/cli";

const result = await runMemoFsCli({
  argv: ["remember", "Use libSQL for local database", "--kind", "decision"],
  cwd: process.cwd(),
});

console.log("Exit code:", result.exitCode);
console.log("Stdout lines:", result.stdout);
console.log("Stderr lines:", result.stderr);

Parameters

interface RunMemoFSCliInput {
  argv: string[];
  cwd?: string;
  output?: CliOutput;
  verbose?: boolean;
  quiet?: boolean;
  noColor?: boolean;
  stdinContent?: string;
}

interface RunMemoFSCliResult {
  exitCode: number;
  stdout: string[];
  stderr: string[];
}

createMemoFSFromCli(options?: CliMemoFSOptions): MemoFS

Instantiates and configures a MemoFS class instance by resolving CLI flag options, environment variables, and project .memofs/config.json.

import { createMemoFSFromCli } from "@memofs/cli";

// 1. Create client with CLI options (inherits env vars & config.json)
const memo = createMemoFSFromCli({
  root: "./my-project",
  runtime: "hybrid",
  cloudUrl: "https://memofs.dev/api/v1",
  apiKey: process.env.MEMOFS_API_KEY,
  timeoutMs: 15000,
});

// 2. Perform core memory operations
await memo.writeMemory({
  content: "Use libSQL for local SQLite replication",
  kind: "decision",
  title: "Local Database Engine",
  tags: ["database", "storage"],
});

// 3. Build token-budgeted prompt context
const context = await memo.context({
  query: "how to configure database storage",
  taskType: "coding",
  maxBytes: 12000,
});

// 4. Query hybrid recall directly
const recall = await memo.recall("database migrations", {
  limit: 5,
});

// 5. Create snapshots
const snapshot = await memo.snapshots.create({ label: "before-refactor" });

Options

interface CliMemoFSOptions {
  cwd?: string;
  root?: string;
  runtime?: string;
  cloudUrl?: string;
  apiKey?: string;
  workspaceId?: string;
  projectId?: string;
  timeoutMs?: string | number;
}

2. Configuration Management

writeDefaultCliConfig(input)

Creates or overwrites .memofs/config.json with portable relative $schema references.

import { writeDefaultCliConfig, resolveSchemaPath } from "@memofs/cli";

const result = await writeDefaultCliConfig({
  cwd: process.cwd(),
  root: ".",
  force: false,
  config: {
    $schema: resolveSchemaPath(process.cwd()),
    runtime: "local",
    root: ".",
  },
});

console.log("Created:", result.created);
console.log("Path:", result.path);

resolveSchemaPath(rootDir: string): string

Returns a portable relative path (../node_modules/@memofs/cli/schema/config.json) if the package schema exists on disk, or the hosted fallback URL (https://docs.memofs.dev/schema/config.json).


3. Protocol Utilities & Inspection

inspectMemoFs(store: MemoryStore, rootDir: string): Promise<MemoFsInspection>

Performs an audit and summary scan of workspace database files, JSONL records, and graph entities.

import { inspectMemoFs } from "@memofs/cli";
import { createNodeFsMemoryStore } from "@memofs/core/node-fs";

const store = createNodeFsMemoryStore({ rootDir: "." });
const inspection = await inspectMemoFs(store, ".");

console.log("Event count:", inspection.summary.eventCount);
console.log("Graph nodes:", inspection.summary.graphNodeCount);

Output Structure

interface MemoFsInspection {
  rootDir: string;
  exists: boolean;
  manifest?: MemoFsCliManifest;
  files: Array<{
    path: string;
    exists: boolean;
    bytes: number;
    lines?: number;
    records?: number;
  }>;
  summary: {
    eventCount: number;
    conversationCount: number;
    chunkCount: number;
    graphNodeCount: number;
    graphEdgeCount: number;
    snapshotCount: number;
  };
}

parseJsonl(content: string, options?: JsonlParseOptions): JsonlRecord[]

Parses newline-delimited JSON strings into structured records with 1-based line numbers.

stringifyJsonl(records: readonly Record<string, unknown>[]): string

Serializes record arrays into newline-delimited JSON with a terminating newline.

validateManifest(value: unknown): MemoFsCliManifest

Asserts and parses an unknown object against ManifestSchema.

createDefaultManifest(input?: { projectId?: string; now?: string }): MemoFsCliManifest

Constructs a default manifest object with generated project UUID.


4. Helper Utilities

Snapshot Utilities

  • validateSnapshotLabel(label: string): string: Validates a snapshot label (1–80 chars, alphanumeric + dots/dashes/underscores, starts with letter/number).
  • createSafeIdFromLabel(label: string, timestamp?: string): string: Builds a collision-safe snapshot identifier string (e.g. manual-2026-08-16T00-00-00-000Z).

Secret Scanning

  • scanForSecrets(content: string): SecretScanFinding[]: Scans text for API keys, private keys, JWTs, and credential assignments.
  • redactSecretPreview(value: string): string: Returns an edge-preserving redacted preview of a secret string (e.g. sk-a…bc12).
interface SecretScanFinding {
  kind: string;
  index: number;
  preview: string;
}

5. Output Writers & Envelopes

createBufferedOutput(options?: BufferedOutputOptions): CliOutput

Constructs an in-memory buffered implementation of CliOutput.

interface CliOutput {
  stdout: string[];
  stderr: string[];
  write(message: string): void;
  error(message: string): void;
  success(message: string): void;
  warn(message: string): void;
  spinner(options?: { json?: boolean }): CliSpinner;
  progress(options?: { json?: boolean }): CliProgressBar;
}

printJsonEnvelope<T>(output: CliOutput, command: string, data: T): void

Standard envelope formatter for --json output:

interface JsonEnvelope<T = unknown> {
  ok: boolean;
  command: string;
  data?: T;
  error?: {
    code: string;
    message: string;
    details?: unknown;
  };
}

6. Error Hierarchy

All CLI errors extend CliError and carry a machine-readable code and numeric exitCode:

type CliErrorCode =
  | "CLI_USAGE_ERROR"
  | "CLI_VALIDATION_ERROR"
  | "CLI_FS_ERROR"
  | "CLI_PROTOCOL_ERROR"
  | "CLI_JSONL_ERROR";

7. Constants

export const MEMOFS_DIR = ".memofs";

export const MEMOFS_CLI_PATHS = {
  manifest: ".memofs/manifest.json",
  coreMemory: ".memofs/memory/core.md",
  notesMemory: ".memofs/memory/notes.md",
  memoryEvents: ".memofs/events/memory-events.jsonl",
  conversations: ".memofs/events/conversations.jsonl",
  chunks: ".memofs/indexes/chunks.jsonl",
  graphNodes: ".memofs/graph/nodes.jsonl",
  graphEdges: ".memofs/graph/edges.jsonl",
  snapshots: ".memofs/snapshots/snapshots.jsonl",
  snapshotsDir: ".memofs/snapshots",
  tmpDir: ".memofs/tmp",
} as const;

export const REQUIRED_DIRS = [
  ".memofs",
  ".memofs/memory",
  ".memofs/events",
  ".memofs/indexes",
  ".memofs/graph",
  ".memofs/snapshots",
  ".memofs/tmp",
] as const;

export const REQUIRED_FILES = [
  ".memofs/manifest.json",
  ".memofs/memory/core.md",
  ".memofs/memory/notes.md",
  ".memofs/events/memory-events.jsonl",
  ".memofs/events/conversations.jsonl",
  ".memofs/indexes/chunks.jsonl",
  ".memofs/indexes/embeddings.jsonl",
  ".memofs/graph/nodes.jsonl",
  ".memofs/graph/edges.jsonl",
  ".memofs/snapshots/snapshots.jsonl",
  ".memofs/connectors.json",
] as const;

export const CORE_MEMORY_SOFT_LIMIT = 200;

On this page