Skip to content

memoryManager: archiveState / deleteState not exposed in CLI (only createState/listStates/loadState) #215

@gcp007-ops

Description

@gcp007-ops

Summary

memoryManager exposes createState, listStates, and loadState, but not archiveState or deleteState. The --include-archived flag on listStates confirms that state archiving exists as a concept internally; it is just not reachable through the public CLI surface.

This makes it impossible to manage obsolete states from automated flows. Operators today must either live with the accumulation, or edit data.json directly with Obsidian closed (lossy and fragile — the plugin owns data.json at runtime, so manual edits get overwritten on autosave).

Reproduction

toolManager.getTools({ tool: "memory" })

Returns (for state operations):

  • createState
  • listStates
  • loadState

No archiveState / deleteState. But:

useTools({ tool: "memory list-states --include-archived" })

…accepts the flag, so archived-state plumbing exists internally.

For comparison, memoryManager does expose archiveWorkspace on the workspace side:

memory archive-workspace <name> [--restore]

The asymmetry between workspaces (archivable via CLI) and states (not archivable via CLI) is the surface gap.

Impact

Concrete instance: a ThinkBox flow on 2026-05-22 produced an obsolete state (a "pre-INI" placeholder superseded by a retroactively-created INI). With the canonical INI established, the placeholder state had no further use, but there is no CLI path to retire it. The state remains visible in listStates indefinitely; the only options are tolerate accumulation or close Obsidian and hand-edit data.json.

Suggested API surface

Symmetric with the workspace side:

memory archive-state <name> [--restore]

That covers archive + restore in one tool, mirroring memory archive-workspace. Internal storage already handles archived vs non-archived (per the --include-archived flag).

If delete-state is desirable for truly disposable states, that's a separate decision — archive alone closes the immediate gap.

Version

Observed on plugin manifest 5.9.6 (current fork build deployed as ThinkBox baseline; patched main.js per #214). The CLI surface in question is upstream behavior, not fork-specific.

Context

ThinkBox uses Nexus as the primary MCP for vault operations. State accumulation is a normal flow side-effect, and operational hygiene benefits from being able to retire obsolete states without dropping out of the CLI envelope.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions