You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The MCP tools and the bm tool CLI expose the same operations with diverging argument names and shapes. Each divergence is individually defensible, but together they make the surface hard to predict — during a single manual QA session (June 11, the #962-#976 batch), a careful user writing CLI commands from the MCP signatures hit six mismatches in a row. Agents have the same failure mode in reverse: they learn one surface and transfer it to the other (the exact rationale behind #930's comma-split decision and #882's workspace-param parity).
Related shape quirk found in the same pass: a JSON-array string inside a list-typed param (--type '["note","task"]') silently matches nothing on both surfaces (parse_tags and parse_str_list are consistent with each other here, but the behavior surprises).
Proposal (v1.0 — the breaking-change window)
Pick one canonical noun per concept (e.g. decide folder vs directory, type vs note_type, singular vs plural for repeatable flags) and apply it to BOTH surfaces.
CLI flags mirror MCP param names wherever it doesn't fight CLI ergonomics; where positional args are kept (query, URL, identifier), make that choice consistent across subcommands.
Deprecation path before 1.0: accept old names as hidden aliases with a deprecation note, remove at v1.0.
Motivation
The MCP tools and the
bm toolCLI expose the same operations with diverging argument names and shapes. Each divergence is individually defensible, but together they make the surface hard to predict — during a single manual QA session (June 11, the #962-#976 batch), a careful user writing CLI commands from the MCP signatures hit six mismatches in a row. Agents have the same failure mode in reverse: they learn one surface and transfer it to the other (the exact rationale behind #930's comma-split decision and #882's workspace-param parity).Observed divergences (same session, current main)
write_note(directory=...)(aliases: folder, dir, path)--folderwrite_note(note_type=...)--typetags(list or comma string)--tags(repeatable)tags--tag(repeatable, singular)search_notes(query=...)QUERYnote_types--typebuild_context(url=...)URLRelated shape quirk found in the same pass: a JSON-array string inside a list-typed param (
--type '["note","task"]') silently matches nothing on both surfaces (parse_tagsandparse_str_listare consistent with each other here, but the behavior surprises).Proposal (v1.0 — the breaking-change window)
foldervsdirectory,typevsnote_type, singular vs plural for repeatable flags) and apply it to BOTH surfaces.Non-goals
bm cloud ...) are out of scope unless they share the same nouns.Found during manual QA, same session as #972/#974/#975.
🤖 Generated with Claude Code