Conversation
…le pass Three medium-priority docs tickets in one batch: - BEDU-1012: new MCP Quick Start page consolidating setup for Claude Code, Claude Desktop, Cursor, Codex, OpenCode, and Antigravity into one per-client table with shared config blocks, namespace guidance, and a three-step verification; added to navigation after the MCP overview. - BEDU-854: the Claude Code page gains concrete prerequisites (Node and plugin-support checks, where credentials live), a three-layer verification sequence, and a troubleshooting FAQ grounded in the MCP package source: failed-server diagnosis with the --help and MEMWAL_MCP_DEBUG paths, headless sign-in through credentials.json, account switching with memwal_logout, namespace-scoped recall, hook installation, credential expiry, and proxy allowlisting. - BEDU-845: style and accuracy pass on the existing Cloudflare Workers page: Seal casing, the guide preamble, and the manual footer folded into a See also block. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
The MCP config blocks in docs/mcp/ are copies of the canonical server entry in the packages/mcp README, because Mintlify cannot import code from repository files at build time. Make that relationship explicit and enforced: cite the canonical source on the quickstart page, and add scripts/check-mcp-docs-sync.mjs, which parses every mcpServers, Codex TOML, and OpenCode block across docs/mcp/ and fails CI when a copy drifts from the README's command or arguments. URL-based Streamable HTTP entries are exempt because they are a different transport, not a copy of the stdio command. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
…ocks Per review: - Replace the MCP-only script with check-docs-code-sync.mjs, which derives canonical facts from the workspace (package names and exports from every packages/*/package.json, the MCP server entry from the packages/mcp README) and validates every page under docs/, not just docs/mcp. It now covers 85 pages: import specifiers must name a real package and a declared entry point, install and npx commands must name a real package, and MCP config blocks must match the canonical entry. One check serves every section, so no per-section scripts are needed. - The check exits non-zero and fails the job, so a drifted snippet blocks the merge and is fixed in the same pull request rather than tracked separately; the failure message says so. - Present the client config blocks as tabs so the formats sit side by side, and repoint the setup table's anchors at the new section. - Drop the See also lists from both pages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Completes the previous commit, which landed the quickstart page and the deletion of the old script but not its replacement: adds check-docs-code-sync.mjs, repoints the workflow job at it, and drops the See also list from the Workers page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
…redential transfer Engineering review found three issues. An unauthenticated memory-tool call returns sign-in instructions rather than opening a browser, since auth-required.ts sets openBrowser false, so both pages now say to ask the agent to run memwal_login and open the URL it returns. check-docs-code-sync.mjs trusted the MCP README as the docs baseline without checking it against the package manifest, so a rename could leave the README and every page consistently wrong with CI still green. It now fails unless the README args name the published package. The headless credential copy moves a file holding the raw delegate private key, so the guidance now requires a secure transfer and 0600 permissions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
…h reference Walrus Memory now speaks OAuth 2.1 on the hosted MCP endpoint, so Claude can add it through the native custom connector flow. Adds a user-facing guide covering the connector steps, what the consent screen grants, and the two-step disconnect, since revoking OAuth tokens leaves the onchain delegate key in place. Also corrects the reference page. The configuration section described the browser as generating the delegate keypair and never releasing the private key, but the relayer generates the keypair itself and stores the encrypted private key, which is why it needs a symmetric encryption key at all. The optional-overrides table was missing MCP_OAUTH_REGISTRATION_TRUSTED_CIDRS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Mechanical pass over the page the previous commit corrected: bold table headers, sentence-case fixes, Seal casing, onchain as one word, active voice, unwrapped prose, and body text between stacked headings. No behavior claims changed here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Add client-side token budgeting so callers can fit recalled context to a
model budget without hand-rolling a tokenizer:
- estimateTokens / countTokens: zero-dep character approximation (~chars/4),
code-point aware; a custom exact counter can be injected via recall options.
- recall({ maxTokens, truncationStrategy }): trims the (distance-sorted)
results client-side. Strategies: high-relevance-only (whole hits), drop-tail
(partial boundary hit), per-hit-cap (equal share per hit).
- RecallResult.meta { tokenEstimate, truncated }: the returned payload's
estimated cost + whether anything was dropped/shortened. Attached only when
maxTokens is supplied, so budget-less recalls are byte-identical to before.
Applied at the existing client-side post-filter seam (alongside maxDistance);
no relayer, privacy, or on-chain surface. Non-finite budgets are treated as
no-budget (never a false truncated flag).
Unit tests for the estimator and each truncation strategy (exact/over/under budget, Unicode/surrogate pairs, mixed-size, single oversized fact, malformed NaN/Infinity/fractional budgets, injected custom counter), plus end-to-end recall() tests proving the wiring: maxTokens honored, total recomputed, meta present, and byte-identical output when maxTokens is omitted.
Production engineering review found both. The block parser matched a fixed three backticks and read the info string with \w+, so a jsonc fence, a four-backtick fence, or a config containing a // comment fell out of the checks without a word. A deliberately wrong block in any of those forms reported success. The parser now takes three or more backticks and closes on a fence at least as long, treats jsonc and json5 as JSON, and strips comments and trailing commas outside strings before parsing. Nothing asserted the check still found anything, so a docs change that moved the config blocks out of reach would leave it green forever. It now requires a floor per config shape rather than in aggregate, because the docs carry three shapes and a break in one hides behind the other two. Verified: the three evasion forms are each caught with the right file and line; breaking the search for any one of the three shapes exits 2 naming that shape; the clean tree still reports the same 32 specifiers, 7 commands, and 9 config blocks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Production is not enabled. Both production discovery routes return 404, so the environment table now leads with staging and dev, marks production as pending with the curl to confirm it, and the citable answer no longer points readers at the production URL. Claude Code over OAuth has redirect-allowlist and unit coverage but no end-to-end test, so the client table recommends header authentication and the loopback path is described as supported by the implementation and unverified in practice. Delegate reuse is per account. find_reusable_oauth_delegate selects on account_id and status alone, so the guide no longer implies the relayer reuses a delegate minted for one particular client, and says a second connector can share the first one's delegate. Scopes are requested, not fixed. The authorization server grants the requested subset, so the page describes the three as supported and tells the reader to read the consent screen for what a client actually asked for. Connector removal in Claude is not documented to revoke tokens, so that step now says what it is known to do and states the relayer's revoke semantics separately. Also corrects two reference claims the review caught: MCP_OAUTH_REGISTRATION_TRUSTED_CIDRS exempts addresses from the per-IP registration throttle rather than gating who may register at all, and memwal_restore clamps limit to 1-100 and returns truncated, which callers need in order to know a bounded restore left the index incomplete. Troubleshooting now uses the FAQ format the other MCP pages use. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
Header authentication stays the documented path for Claude Code. The loopback redirect is supported by the implementation and covered by unit tests, which the page now says, but nobody has completed a Claude Code OAuth connection end to end, so the page no longer presents the two as equally verified. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
The production-status update introduced "may", which the style guide replaces with "might". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
…lerts Feat/enoki sponsored walrus alerts
Promote dev to staging
Collaborator
Author
|
Hi @harrymove-ctrl, could you please help review and approve this PR to promote the validated staging changes to main? Staging deployment has been verified and all checks are green. Thank you! |
- Link OAuth 2.1 and the Sui wallet docs on first mention, and link
"Walrus Memory account" to the ownership concept page.
- Drop "the verified path" from the client table and cut the paragraph
about Claude Code OAuth over a loopback callback. That state is
engineering's to change, not ours to track in docs.
- Put the link on the question itself ("who holds the delegate key")
rather than on a trailing clause.
- Convert Disconnect to <Steps> so it matches "Add the connector", and
link "stdio client" in both places it appears.
- Switch Troubleshooting to the bullet format the other MCP pages use.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
The final step told you to state a durable fact and check that Claude called memwal_remember on its own. That verifies proactive tool use, which is the behavior currently under investigation after the reported Claude and Codex regression, and it is not what this page documents. The page documents the OAuth grant. Verify that instead: the delegate appears in the Walrus Memory dashboard at the address the consent screen showed. That check holds whatever the investigation concludes, and it matches the delegate the Disconnect section tells you to remove later. Listing the memwal_* tools stays as a check, since a completed handshake does establish that the server is reachable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
…cp-docs-batch # Conflicts: # .github/workflows/test.yml
Same two classes the reviewer raised on #603, fixed here before they get raised again: - "Walrus Memory account" appeared unlinked in the prerequisites on both pages. Both now link the ownership concept page on first mention. - The Verify section wrote its three checks as a bolded numbered list while the page uses <Steps> for Installation. Converted to <Steps>. The wording of the end-to-end check is unchanged. It describes proactive tool use, which is under investigation after the reported Claude and Codex regression, and that wording is on hold rather than in scope here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoBWxqLzd9hAxrhoqv3iSv
…r-injection fix(mcp): block inbound internal header injection in reverse proxy
…eader-verification fix(mcp): verify internal headers at the sidecar and fail closed on missing scope
…ge-idle-close-orphans-in-flight-remember-calls fix(mcp): answer a tool call whose response never arrives
Promote OpenClaw 0.0.6 into the release verifier instead of pinning it as unchanged, restore the lazy-loading clause in the docs answer, and drop the private Linear ticket plus the inaccurate late-reply claim from the 0.0.10 notes.
fix(mcp): inject default namespace for memwal_remember_bulk calls
Record the merged remember_bulk default-namespace fix alongside the existing 0.0.10 notes so the GitHub Release body includes it.
chore(release): include WALM-328 fix in MCP 0.0.10 changelog
Promote dev to staging
Collaborator
Style Guide AuditAudited 12 file(s) against the Sui Documentation Style Guide. 7 violation(s) found. All must be fixed before merge.
|
Cold-start tools/list still advertised "call remember ONLY when asked", so clients that keep the first list ignored SessionStart/UserPromptSubmit. Align those descriptions with the sidecar. UserPromptSubmit treated "what do you remember about how I like to work" as a new preference because "I like" matched the remember heuristic. Questions about stored facts now inject memwal_recall only. Setup skill and Claude Code docs now require the plugin CLI and refuse to treat MCP-only as a complete Claude Code install.
Review caught that isQuestion plus a bare remember word inverted explicit save requests into recall-only. Drop remember from the extra question heuristic and keep the dedicated recall phrases. Cover the inversion plus whats-my and tell-me-what-you-remember in hook tests.
UserPromptSubmit no longer keyword-classifies the prompt. It injects a decision rubric so the agent picks the tool from meaning — Vietnamese, typos, and nested "I like" questions no longer steer the wrong call. Co-authored-by: Cursor <cursoragent@cursor.com>
Writes are expensive. The hook rubric, initialize instructions, and remember tool descriptions now tell the agent to skip one-off tasks, the current file or bug, small talk, and duplicates. Co-authored-by: Cursor <cursoragent@cursor.com>
Loosen the remember bar so preferences and decisions save without being asked, while still skipping one-off tasks. Setup now merges a user-level CLAUDE.md routing block so MEMORY.md does not win the system prompt. Co-authored-by: Cursor <cursoragent@cursor.com>
Harry review on #706: signed-out tools/list was advertising proactive remember, so a model without credentials would spam 401s. Keep that path conservative. Signed-in cold start (bridge) still uses the sidecar wording. Advertise memwal_recall as a read-only search so clients that gate on destructiveHint do not hold back proactive recall. Drop the em dash the docs style audit flagged.
Restore firstTime so the full decision rubric injects once per session and later turns get a one-line nudge. Lower the quiet gate to 8 chars so terse Vietnamese preferences are not skipped. Pin hook tests to byte-identical output across prompts instead of re-asserting the constant. Wrap the CLAUDE.md routing block in memwal start/end markers and require user go-ahead before writing a global file.
fix(mcp): make Claude Code auto-remember/recall actually fire
Rebased onto dev after #706 landed. Two of the four things this branch originally carried are now solved there, better than I had them: - #706 split SIGNED_OUT_* from SIGNED_IN_* tool descriptions via buildToolDefinitions(proactive). My version pushed proactive wording into the one shared list, which would have told signed-out clients to save proactively with tools that cannot work. Dropped mine. - #706 set memwal_recall to readOnlyHint: true, destructiveHint: false, going further than the readOnlyHint: false I had. Dropped mine. memwal_analyze keeps dev's destructiveHint: true; it writes memories, so that value is defensible. What remains is what #706 did not cover. 1. REMEMBER had no turn anchor. Measured on dev with the #706-equivalent fixes live, T1-T3 from WALM-368, scored from the MCP log rather than the tool cards: T2 recall PASS memwal_recall fired unprompted and answered from it T1 remember FAIL no tools/call at all T3 control PASS Recall firing is new; both earlier dogfood passes recorded zero tools/call for a whole session. RECALL and REMEMBER ship in the same instructions block, to the same client, in the same session, so this is a controlled comparison rather than a guess. The difference is in our own text: RECALL is anchored to a turn event ("before answering anything that touches..."), REMEMBER said "without waiting to be asked", which asks the model to classify a statement and then self-start with nothing tying the call to a moment. In T1 it replied "Got it - <fact>. What do you need done with it?", treating a durable fact as task setup. REMEMBER now anchors with "in that same turn, before you finish replying", adds configuration values (hostname, port, region, id) since the failing case was one, and closes the observed behaviour: do not ask whether to save, and acknowledging a fact in the reply does not store it. #706's scoping ("skip one-off tasks, the current file or bug, and small talk") is preserved verbatim. Applied to all three copies; the two that must be byte-identical were verified so. 2. Tool calls were not scorable. The host logs `method="tools/call" id=N` with no tool name, so "remember never fired" and "remember fired and failed" are indistinguishable - the exact ambiguity under investigation. Logs bridge.tool_call with the tool NAME and never `arguments`, since memory text is the user's private data. 3. No live check of what a client is actually handed. test/handshake-contract.mjs drives the real built server against a chosen env and asserts the delivered contract: instructions present with both halves anchored, recall advertised read-only, and cold start agreeing with upstream field by field. Not named *.test.mjs on purpose - it needs a live relayer and credentials, and the npm test glob must not collect it. tool-definitions.test.mjs from #706 covers the static list; this covers the deployed path, which is where the earlier runs went wrong: metadata lives in services/server/scripts, so a published package alone changes nothing for a signed-in user, and testing before the relayer redeploys measures the old server. packages/mcp 28 pass, services/server/scripts 221 pass. Refs WALM-324, WALM-368
…tools Running the new probe against dev caught drift #706 did not cover. It synced memwal_remember and memwal_recall, which were the contradictory ones, and left four others pointing at pre-rewrite copy: memwal_remember_bulk title "Remember Several Facts" -> "Remember Multiple Facts" memwal_health title "Check Relayer Health" -> "Check Walrus Memory Health" memwal_analyze description 150 chars -> 340 memwal_restore description 165 chars -> 427 Less severe than the remember/recall case, since these are thinner rather than contradictory: memwal_restore upstream explains when to reach for it ("recall returns nothing even though facts were saved before"), while the cold-start copy only described the mechanics. A client that caches its first tools/list keeps the thin version for the whole session. Values copied programmatically from a live upstream tools/list rather than retyped, so they cannot drift again through transcription. login-handoff pinned the two stale titles. Its own comment requires pre-login discovery to expose "the same safety metadata clients will receive after the bridge hands off", so the expectations were wrong, not the change. Also makes the probe's instruction assertions whitespace-tolerant. The payload is newline-wrapped, so a phrase match with literal spaces fails on correct output whenever the phrase straddles a wrap. That produced a false FAIL on "Do not ask whether / to save it" and would keep doing so on any future rewording. packages/mcp 28 pass, services/server/scripts 221 pass, handshake-contract --dev 13/13. Refs WALM-368
…aseline MEMWAL_MCP_SERVER overrides the server path, which defaults to this checkout's build. Without it the probe can only describe the branch it sits in, so it could not answer the question that actually matters before merging: what does dev ship today? Measured against the real shipping artifacts, published @mysten-incubation/memwal-mcp@dev 0.0.10-dev.4 talking to the dev relayer at e4bdcc9 (#706), signed in: 11/13 passed FAIL REMEMBER is anchored to a turn event FAIL cold-start and upstream lists agree (drift: remember_bulk, analyze, restore, health) Those are exactly the two defects this PR fixes, and they reproduce with no code of mine in the path: dev's own package, dev's own relayer. The same probe against this branch reports 13/13. Useful beyond this PR as the before/after harness for any change to the handshake contract, and as the pre-flight before a dogfood run: it distinguishes "the model chose not to call the tool" from "the client was never handed the contract", which is the ambiguity that made the earlier WALM-368 runs unreconcilable. packages/mcp 28 pass. Refs WALM-368
fix(mcp): anchor REMEMBER to the turn, log tool names, add a live handshake probe
Promote dev to staging
harrymove-ctrl
had a problem deploying
to
benchmark-staging
August 20, 2026 08:59 — with
GitHub Actions
Failure
harrymove-ctrl
approved these changes
Aug 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Promote the latest validated
stagingchanges tomain.Includes #663 / #664:
Promotion Path
fbb966891ddeacd75cff98adae6dca41f2b9a3b4Staging Evidence
fbb966891ddeacd75cff98adae6dca41f2b9a3b4.GET https://relayer.staging.memwal.ai/healthreports build commitfbb966891ddeacd75cff98adae6dca41f2b9a3b4and statusok.interval=900s,wallet_threshold_wal=10000000000,wallet_threshold_sui=2000000000,sponsor_threshold_sui=2000000000)."sponsored": true).Validation