Skip to content

chore(release): memhub v0.133.0 - #292

Merged
sgonz-xtrace merged 3 commits into
mainfrom
promote/memhub-v0.133.0
Oct 15, 2026
Merged

sgonz-xtrace merged 3 commits into
mainfrom
promote/memhub-v0.133.0

Conversation

@sgonz-xtrace

Copy link
Copy Markdown
Contributor

MemHub plugin v0.133.0, built from internal main.

Source-RevId: 5403278ed2328628872b897a75d6c4e97ce04946
SHA256SUMS: 70a7eab8da80e2a6ef34d520bc759146aeb8c204a1cf019e7c9812708c1dd633

Built by promote run 38672534170 at XTraceAI/agent-plugins-internal@5403278ed2328628872b897a75d6c4e97ce04946: the plugin suites pass at that commit, and the
export is verified — named memhub, one version across all four manifests, the production
backend in .mcp.json, and nothing shaped like a credential. Every file's digest was
re-checked against SHA256SUMS in the clone this branch was pushed from, so what is here is
what that run produced.

What's in this release

Everything merged on internal main since the last release, v0.124.0 (7eb88f97d): 40 change(s), 28 of them in the plugin (full range).

Breaking changes

  • The find-contributing-sessions skill is removed; use /memhub:link-pr --find instead, with the same flow. (#182)
  • Adds a per-repo allowlist, and the companion animal is now off by default, so users must turn it back on. (#205)

Security

  • The installer adds an Agent(fork) allow rule so rule drafts launch under auto mode; use --no-fork-agent to opt out. (#215)

Features

  • Subagent transcripts are captured as their own linked sessions, and MemHub's internal harness forks are never sent. (#189)
  • Records what the agent did after each shown rule fire so the server can judge whether the rule helped. (#194)
  • When a rule is judged to have cost a session, a background fork drafts a proposed repair for review. (#204)
  • The companion tells you when no one is signed in to MemHub and points you to /memhub:login. (#203)
  • The status strip asks whether to enable MemHub in an unlisted repository, with Yes, No and Later options. (#212)
  • Team rules now gate shell commands and file reads on Cursor. (#216)

Bug fixes

  • The create-rule verifier now rejects patterns that get quadratically slower on large text, and suggests a linear rewrite. (#183)
  • Rules are judged by the repo a call touches, Bash writes are checked before they run, and capped rules keep working. (#176)
  • The browser sign-in link now appears immediately when device-code login is refused, instead of hanging until timeout. (#188)
  • Test and lint gates now clear after runs through uv, venv or python -m, and the default branch can be set. (#192)
  • The start-rulebook session miner counts subagent sessions and deleted worktrees, matches hook edit reading, and runs faster. (#193)
  • Sign-in no longer fails on machines with an empty Python trust store, and the installer enables auto-update and repairs stale marketplaces. (#195)
  • Rule drafts filed by the harness now carry categories, so they count correctly on the Home Rules card. (#206)
  • A repo's rule book is fetched before its first call is judged, so the first edit in a new session now fires rules. (#207)
  • Create-rule's live forward test now fires its candidate rule on Claude Code builds that load the Rulebook mod. (#211)
  • Login stores MEMHUB_TOKEN as the machine key so cloud and CI sessions get the MemHub MCP tools. (#217)
  • Read gates now fire on shell reads of files in a repo when the command runs from a folder outside any checkout. (#213)
  • Rules with no repo scope now fire outside any checkout, and repo rules fire when acting on a repo from outside it. (#214)
  • Unscoped rules now also fire outside any checkout on Codex and Cursor. (#219)

Performance

  • Rule hooks respond faster on matching calls and prompts, and rules now fire on failed commands. (#199)

Changes

  • Removes the add_memory gate hook, since the server no longer offers add_memory; capture is unaffected. (#184)
  • Create-rule now asks whether an action has a heredoc form and files that form as its own rule. (#202)
  • PR babysit now proposes team rules from fixed review findings instead of saving a review record. (#181)
  • New rules default to your personal scope; org-wide filing now needs a stated reason. (#209)

Documentation

  • Rewrites search, save, import and create-rule skill descriptions in plain language, and manifests stop listing skills. (#178)
Merged on internal but not in the plugin (12)
  • Fixes the directory release build so it no longer ships a manifest field for a folder it drops. (#185)
  • Release checks now read the rulebook fire ledger under its backend-keyed path. (#186)
  • Updates stale harness cases, fixtures and audit checks to match current plugin behavior. (#187)
  • A one-command install.sh installs MemHub into every agent on the machine and signs in once. (#190)
  • Re-running the installer now refreshes already-added marketplaces so it picks up newer releases. (#191)
  • Retires the case-guard CI workflow. (#196)
  • Drops the merge-bot case-guard gate and the docs that named it. (#197)
  • The release promotion export now ships install.sh so public and internal copies stay identical. (#198)
  • The installer no longer hangs when Cursor's agent CLI stalls, and it continues on to sign-in. (#200)
  • Restores the case-guard workflow, merge-bot gate and docs. (#201)
  • The installer survives a Codex marketplace added from another source and no longer repeats duplicate-disable warnings. (#210)
  • Fixes a stale projectless test assertion that left main red. (#218)
This PR replaces `plugins/memhub/` — and the root `install.sh`, when the export carries one — and nothing else.

Proved on staging, per surface (scripts/surface_evidence.py, source commit and v0.133.0):

Surface Proved by Result
Claude Code CLI harness release tier ⚠️ waived — no release-tier run by choice: nightly harness 38526338612 (Oct 14) green on all hosts bar 3 non-blocking cases (grader wording, a 0/1 after 3/3 prior nights, a cursor-agent RetriableError flake); every change since passed its PR checks, and tonight's nightly on this commit gates a follow-up hotfix (no release-tier harness run on this commit)
Codex CLI (codex exec) harness release tier ⚠️ waived — no release-tier run by choice: nightly harness 38526338612 (Oct 14) green on all hosts bar 3 non-blocking cases (grader wording, a 0/1 after 3/3 prior nights, a cursor-agent RetriableError flake); every change since passed its PR checks, and tonight's nightly on this commit gates a follow-up hotfix (no release-tier harness run on this commit)
Codex app engine (codex app-server, the app's bundled version) harness release tier ⚠️ waived — no release-tier run by choice: nightly harness 38526338612 (Oct 14) green on all hosts bar 3 non-blocking cases (grader wording, a 0/1 after 3/3 prior nights, a cursor-agent RetriableError flake); every change since passed its PR checks, and tonight's nightly on this commit gates a follow-up hotfix (no release-tier harness run on this commit)
Cursor CLI (cursor-agent) harness release tier ⚠️ waived — no release-tier run by choice: nightly harness 38526338612 (Oct 14) green on all hosts bar 3 non-blocking cases (grader wording, a 0/1 after 3/3 prior nights, a cursor-agent RetriableError flake); every change since passed its PR checks, and tonight's nightly on this commit gates a follow-up hotfix (no release-tier harness run on this commit)
Claude Desktop, Code tab audit of real use ⚠️ waived — exercised by hand on staging 0.132.3, where every tested path passed; not re-run on 0.133.0 (no audit report)
Codex app (ChatGPT.app) audit of real use ✅ 2 session(s) on staging since 2026-10-15T02:34:50Z, machine 82f5bf488778
Cursor IDE audit of real use ✅ 1 session(s) on staging since 2026-10-15T02:34:50Z, machine 82f5bf488778

Before this can merge: main requires the Real agent evidence check, which is a commit
status, not a check run — it exists only once someone dispatches it on this PR's exact head:

gh workflow run real-agent-evidence.yml -R XTraceAI/agent-plugins --ref promote/memhub-v0.133.0

Push again and the new head needs a new run.

After merge, in this order (RELEASING.md):

  1. Tag the merge commit memhub--v0.133.0 and push the tag first — the Claude pin
    cannot resolve a ref that is not there yet.
  2. Move ref and sha in .claude-plugin/marketplace.json to that tag, by PR.
  3. Smoke-test Claude, Codex and Cursor.

Codex and Cursor ship the moment this merges: their catalogs carry no pin and cache by
version string.

Promoted from XTraceAI/agent-plugins-internal by scripts/promote_ship.py.

Source-RevId: 5403278ed2328628872b897a75d6c4e97ce04946
@sgonz-xtrace
sgonz-xtrace deployed to production-plugin-release October 15, 2026 03:03 — with GitHub Actions Active
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T03:24:30.367240Z a0647de New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 25b27259b4

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +178 to +179
else:
spawn_cursor_flush(payload, event)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Honor the repository allowlist before Cursor capture

When repos.json excludes the current repository, Cursor events still reach this branch and launch cursor_flush.py; unlike the Claude/Codex entry path, neither this launcher nor cursor_flush.py checks repo_allow.session_enabled. Consequently a user selecting only trusted repositories can still have a Cursor session from an unlisted client repository uploaded, contradicting the new dormant-mode privacy guarantee. Check the payload's workspace/cwd against the allowlist before spawning any capture process.

Useful? React with 👍 / 👎.

Comment thread plugins/memhub/README.md
| `find-contributing-sessions` | Reads this machine's Claude Code, Codex and Cursor session history to find the sessions behind your pull requests. Its script runs `gh pr view` and `gh api` for each PR's files. It prints paths, branches and commit ids, never transcript content, and links only the sessions you approve. |
| `pr-babysit` | Polls a pull request's review bots and CI with `gh`. The agent fixes findings, commits, pushes and replies on review threads. Once the PR is clean, it saves a review record to the repository's brain. The `pr_babysit_trigger` hook asks the agent to start it after `gh pr create`. |
| `create-rule` | Drafts a team rule, replays it over this machine's sessions, and files it as `proposed` with `create_rule`. |
| `link-pr` | Links or unlinks a session and a pull request in MemHub. Asks the agent to run `gh pr view`. With `--find`, reads this machine's Claude Code, Codex and Cursor session history to find the sessions behind your pull requests: its script runs `gh pr view` and `gh api` for each PR's files, prints paths, branches and commit ids, never transcript content, and the skill links only the sessions you approve. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Move the finder tests with the consolidated skill

The checked bump-guard.yml workflow runs scripts/check-plugin.sh, which executes every tests/*_test.py, but this consolidation deletes skills/find-contributing-sessions while tests/find_sessions_test.py and tests/documentation_test.py still open files at that old path. Running python3 tests/find_sessions_test.py now exits with FileNotFoundError, so the required plugin check fails on every run; update those suites and the remaining top-level README references to target skills/link-pr and --find.

Useful? React with 👍 / 👎.

Comment on lines +379 to +380
p = pending_path(sdir, session)
st = _load(p)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Serialize effect-state read-modify-write operations

When the async Stop handler overlaps the next UserPromptSubmit—the race this feature explicitly supports—on_turn_end and on_prompt both load and later replace the same effects state without a lock or merge. For example, the prompt can save last_prompt after this load and then have it overwritten here, causing the window to remain pending and be attributed to the following user message; the reverse interleaving can erase the pending window entirely. Serialize the whole state transition per session so effect verdicts and repair proposals are based on the correct reaction.

Useful? React with 👍 / 👎.

A promotion replaces plugins/memhub/ and install.sh only, so public's tests/
stayed at 0.124.0 while the plugin moved to 0.133.0. Twelve suites failed
guard and probe-tests on #292, each on an intentional internal change.

The twelve suites are internal's at 5403278e (the promoted commit), with
memhub-staging rewritten to memhub. The README's installer paragraph now
describes the installer this release ships (auto-update, fork agent, the
repository allowlist with /memhub:repos, the companion prompt). No file
under plugins/ changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@xtrace-memhub-staging

xtrace-memhub-staging Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

🧠 Session context

1 session behind this pull request.

Team rules that fired while building this

  • fetch-before-origin-read (advise, 1×)
  • Internal plugin tracks the staging backend, not prod (suppressed, 1×)
  • Merged plugin PR is not released (suppressed, 1×)
  • Reread the whole skill after iterative edits (suppressed, 1×)

Effort
1 session · 1h 27m agent time · 12.2M tokens · 215 turns
Bash 79 · ScheduleWakeup 3 · Agent 2 · mcp__plugin_memhub-staging_memhub__link… 2 · mcp__plugin_memhub-staging_memhub__sear… 2 · Skill 2 · 2 subagent calls · skills loop memhub-staging:pr-babysit

Sessions

test: bring public's suites up to the v0.133.0 plugin
@sgonz-xtrace
sgonz-xtrace deployed to production-plugin-release October 15, 2026 03:16 — with GitHub Actions Active
@sgonz-xtrace
sgonz-xtrace deployed to production-plugin-release October 15, 2026 03:16 — with GitHub Actions Active
@sgonz-xtrace
sgonz-xtrace deployed to production-plugin-release October 15, 2026 03:16 — with GitHub Actions Active
@sgonz-xtrace
sgonz-xtrace deployed to production-plugin-release October 15, 2026 03:16 — with GitHub Actions Active

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a0647de4c9

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +3128 to +3131
if info[0] not in _BOOKS:
got = load_rules(info[0])
if refresh:
got = first_fetch(info[0], got[0], got[2], got[3]) # (rules, fetched_at, sources)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Honor the allowlist before loading foreign-file rulebooks

When a shell call runs in listed repo A but accesses a path in unlisted repo B without changing directories (for example, cat ../client/secret or echo x > ../client/file), repo_of_call selects A and passes the top-level allowlist check, after which _file_book loads and may refresh B's book without checking repo_allow.enabled(info[1]). Rules from a repository that is supposed to be dormant can therefore inspect or block the cross-repo read/write; reject foreign books whose checkout is not enabled before loading or fetching them.

Useful? React with 👍 / 👎.

Comment on lines +1011 to +1012
band.active = await activeOf($, band)
return wanted && band.active.enabled

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Stop proposal polling in dormant repositories

When wantedOf finds that the current repository is excluded, this result only disables the animal; setUp still immediately calls pollProposals and installs its five-minute timer. An authenticated /v1/team/rulebook/proposed request therefore continues from a repository advertised as dormant, and returned proposals can even take precedence over the inactive strip and expose Activate/Reject controls. Gate proposal polling and proposal-state rendering on band.active.enabled (while resolving sign-in locally if needed for the enable prompt).

Useful? React with 👍 / 👎.

Comment on lines +243 to +247
for sp in _subagent_files(host, path):
try: srecs, _ = R[host].to_canonical(sp)
except Exception: continue
_, sc, sr, src, _ = _walk(srecs, keep_users=False)
subs.append((sc, sr, src)); subagent_files += 1; subagent_calls += len(sc)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Filter inherited history before folding subagent calls

For Claude fork transcripts that repeat their parent's history, _walk accepts every record—including inherited/isSidechain records—and the resulting calls and results are merged back into the already-parsed parent. Each parent call is consequently replayed once per fork, inflating fired_n and ordering evidence and potentially pushing rules over proposal thresholds even though those calls occurred only once. Fold only the subagent's own trajectory, or explicitly discard inherited sidechain records before merging.

Useful? React with 👍 / 👎.

Comment on lines +288 to +291
try:
with open(path, encoding="utf-8") as f:
rec = json.load(f)
return isinstance(rec, dict) and age_s(rec.get("at")) < window

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Consume expansion markers after one submitted prompt

If a normal user prompt arrives within five seconds after a slash-command expansion, this function still returns true because the marker is never consumed or matched to a particular submission. The ordinary prompt is then treated as another command body, so it neither arms prompt obligations nor becomes the next-person-message evidence for fire effects; the reverse event order mentioned in the comment makes this especially reproducible because the marker can be written after the actual command body was submitted. Consume the marker on the first matching submit, or correlate it with the recorded expanded prompt.

Useful? React with 👍 / 👎.

Comment on lines +516 to +518
tid = repair.get("tool_use_id")
if not tid:
return None

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Map prompt-lane fires before discarding their repairs

When the effect judge returns a cost verdict for a prompt rule, its fire has hook_phase="prompt" and no tool_use_id, so _turn_of_fire always returns None. fire_effect.pending_repair has already advanced the verdict offset and marked the rule as handed before this check, making the repair permanently disappear for the cooldown period. Resolve prompt fires to the corresponding person turn using their phase/time instead of requiring a tool result ID.

Useful? React with 👍 / 👎.

Comment on lines +162 to +163
if has_rule:
cleaned = _with_rule(cleaned, path, False)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve pre-existing Agent(fork) allow rules

If the user already allowed Agent(fork) for unrelated workflows before installing MemHub, running the documented onboard removal path unconditionally deletes that permission even though this installer did not add it. This silently changes the user's broader Claude permission policy; either record ownership when adding the rule or leave an indistinguishable pre-existing allow rule intact during removal.

Useful? React with 👍 / 👎.

@sgonz-xtrace
sgonz-xtrace merged commit 0999905 into main Oct 15, 2026
12 of 13 checks passed
sgonz-xtrace added a commit that referenced this pull request Oct 15, 2026
With the 0.133.0 plugin, check-plugin.sh's bare-Python and MCP-SDK legs
run past guard's 10-minute limit (cancelled at 10m16s on #292, #293 and
this PR), so guard never reports. promote.yml on internal runs the same
two legs under 20 minutes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
production-plugin-release — a0647de4 Deployed Oct 15, 2026 by sgonz-xtrace via Real agent session (claude) #95
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