Skip to content

fix: scope snake_case tools to the repo and approve them as read-only - #6

Open
ishaanxgupta wants to merge 2 commits into
mainfrom
ishaan/audit-fixes
Open

ishaanxgupta wants to merge 2 commits into
mainfrom
ishaan/audit-fixes

Conversation

@ishaanxgupta

@ishaanxgupta ishaanxgupta commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

  • Approval. recall-approve now also allows the snake_case read-only tools: get_profile, list_documents, get_document, list_memories, list_spaces, who_am_i. Before, only the deprecated camelCase names were listed, so the current names prompted.
  • Repo scoping. The proxy defaulted only the camelCase list tools to the repo tag. A list_documents call with no tag therefore returned documents from across the whole account. It now also defaults these to the repo:
    • list_documents, list_memories, get_document, get_profile;
    • forget_memory, so it targets the same space as add_memory.
      Account-level tools (list_spaces, who_am_i, set-active-tag, select-space) are left alone.
  • Explicit space. The hosted server now names the field namespace and keeps containerTag as a deprecated alias (it reads namespace ?? containerTag). The proxy now treats either one as the caller's choice and doesn't inject over it.
  • Recall hint. The hint said omitting containerTag searches the account's shared space, but the proxy fills in the repo tag. It now says what happens: calls without a tag search this project, and to search another space you pass its tag (found with list_spaces).

Not changed: guided-save

guided-save takes no namespace or containerTag. Its input is just prefill, and the form opens on the account's active space (apps/mcp/src/server/tools/guided-save.ts). An injected tag would be dropped by the schema, so the proxy doesn't inject one. Making the form open on the repo space would need a server change.

Release

0.3.1 in package.json and .muse-plugin/plugin.json, which leaves 0.3.0 for the background sign-in PR.

Tests

  • node --test test/unit.mjs: 11 pass, 0 fail.
  • New tests:
    • the snake_case read tools are approved;
    • the new tools get the repo tag;
    • account-level tools get none;
    • an explicit namespace is kept.

Prod check (sandboxed HOME, fresh OAuth sign-in, 2026-10-29)

Repo tag for this check: the throwaway SUPERMEMORY_REPO_TAG=audit_test_muse_scope_20261029.

  • tools/list through the proxy returned 22 tools. recall-approve auto-approves the 14 read tools: search_memory, get_profile, list_documents, listDocuments, get_document, getDocument, list_memories, listMemories, list_spaces, listSpaces, who_am_i, whoAmI, memory-graph, fetch-graph-data.
  • list_documents with no tag, same account and same call:
    • main's proxy: totalItems = 53 (the account's active space);
    • this branch: totalItems = 1 (only the test document in the repo tag).
  • add_memory and get_profile with no tag both report namespace = audit_test_muse_scope_20261029.
  • The recall hint as the model now sees it:
- Calls without a containerTag search this project ("audit_test_muse_scope_20261029").
- To search another space, pass its containerTag (find it with list_spaces).
  • Prod's guided-save input schema has no namespace or containerTag, which confirms the note above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant