feat(knowledge): seam — plugin skeleton, fold book-distill, library_dir + setup#93
Conversation
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_5ed681d6-4e16-44ea-853b-6063dfbd13ea) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
…ir + setup Establish the `knowledge` plugin (category: knowledge) and its shared seams as the first shippable version, per wave-2 map. Extraction pipelines (youtube, course-digest) land in gated retrofit sub-issues that build on this seam. - Skeleton: plugin.json + README catalog entry + marketplace registration. - Fold book-distill: move the standalone plugin's skill in as knowledge's first skill; retire the standalone marketplace entry; migrate consumer keys via the top-level `renames` map (book-distill -> knowledge, v2.1.193+). - library_dir seam: a `directory` userConfig option (default repo root ".") governing where synthesized artifacts land in the consuming repo. - setup action: a re-runnable, idempotent skill persisting library_dir to pluginConfigs. category lives in marketplace.json (marketplace-specific field; fails --strict in plugin.json) rather than the issue body's literal "plugin.json (category)". Refs melodic-software/medley#1373
6f6e40b to
1ea9843
Compare
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_f0dcdc5f-0703-49cc-bf02-9cfa598135bb) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
|
Claude finished @kyle-sexton's task in 4m 37s —— View job PR Review: feat(knowledge) seam
Docs fetched from canonical URLs per repo mandate:
What's confirmed correctMarketplace / renames
plugin.json
Skills
Security posture (book-distill)
Findings1. The Claude Code prompts users to configure The PR description explains the intent ("seam slice — the two heavy extraction pipelines land in gated retrofit sub-issues"), but the README and setup skill output don't signal to consumers that this option is currently a reserved seam. A consumer who sets Suggestion: add a one-line note to the setup skill output and the README's Configuration table making clear that 2. Version regression: The folded No action required, but consider starting at 3.
Overall assessmentThe migration approach, schema usage, and security posture are all solid. The renames map is correctly structured, the |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6f6e40bad2
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…on, trim frontmatter - README + setup output: state that library_dir governs ingestion-pipeline artifact landing and that book-distill is unaffected (writes to its named target skill), so consumers prompted at enable time understand the reserved seam. - Bump version 0.1.0 -> 0.1.1 to reflect the folded book-distill pipeline's prior version. - Drop redundant `disable-model-invocation: false` (the default) from the setup skill frontmatter.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_667aac8c-632b-43d3-a43c-54d2846fd9f3) |
|
Claude finished @kyle-sexton's task in 2m 34s —— View job PR Review: feat(knowledge) seam — re-review after fix commit
The fix commit Initial findings — all resolved ✅
Codex findings — assessed1. Settings precedence reading order in
Practical impact is low (uncommon to have both project and local config for the same key), but the read order should match effective precedence. Suggested fix: reverse the read order to local → project → user, or make the skill read all three scopes and report each, deferring to the local value as the effective baseline. 2. Plugin data orphaned by rename for in-progress distillations (low impact, worth documenting)
The README already states "Cross-session state... persists under The affected population is small (only users actively mid-distillation at upgrade time), so this is documentation rather than a blocker. Overall assessmentThe fix commit was clean and directly responsive. All three original findings are resolved. The two Codex points are both low-impact: the precedence ordering is a minor UX rough edge affecting an unusual configuration state, and the plugin data orphan only affects users actively mid-distillation at the moment of rename. Neither is a blocker for this seam slice. The plugin architecture, schema correctness, security posture, and renames map structure remain solid. |
|
Addressed all three findings in 7cd63a7:
|
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_98c38bfd-1894-439d-b404-103b67b416c3) |
|
Claude finished @kyle-sexton's task in 1m 34s —— View job PR Review: feat(knowledge) seam — re-review after merge sync
The sync commit ( Codex findings — statusBoth open Codex findings remain unaddressed. 1. Settings precedence order in
Claude Code's effective precedence is Local > Project > User. A consumer with a local overlay ( Suggested fix: reverse the read order to local → project → user, reporting the highest-precedence value found and noting its scope. 2. Plugin data orphaned by rename — still open The "Migrating from the standalone One sentence in the migration note would prevent silent loss for that narrow population. OverallNo new issues from the sync. All three original findings from the initial review remain resolved. The two Codex findings are low-impact (uncommon config state for #1; narrow affected population for #2) and are not blockers, but addressing them before merge would round out the migration story. |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_d0a65e34-b6cc-4088-a313-32389aebbe07) |
|
Claude finished @kyle-sexton's task in 1m 14s —— View job PR Review: feat(knowledge) seam — re-review after merge sync
The latest sync commit ( Prior findings — all resolved ✅All three original findings from the initial review remain addressed (from Two open Codex findings1. Settings precedence order in
Claude Code's effective precedence is Local > Project > User. A consumer who has both a project baseline and a local overlay (e.g. a developer overriding a team default) will have the lower-precedence project value surfaced as "current" and potentially re-written, while the local override continues to be what Claude Code actually uses — the setup appears to succeed but doesn't change the effective value. Suggested fix: reverse the read order to 2. Plugin data orphaned by rename — still open
One sentence added to the migration note would cover this:
Overall assessmentThe merge brought no regressions. The plugin architecture, schema correctness, security posture, and renames map structure remain solid. Both remaining items are low-impact — finding #1 affects an uncommon double-config state, and finding #2 affects only users actively mid-distillation at rename time — but both are worth addressing before merge to complete the migration story. |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
…data migration note
- setup: read library_dir in Claude Code precedence order (Local > Project >
User) and report the effective value + its scope; warn when a local override
shadows the project value a project-scope edit writes.
- README: note that an in-progress book-distill distillation's ${CLAUDE_PLUGIN_DATA}
resume state is keyed by plugin id and NOT migrated by renames — copy the old
book-distill data dir to knowledge before resuming.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_2febae15-4e59-4728-9ef2-9eb39ac76c82) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d9220346fd
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 1m 46s —— View job PR Review: feat(knowledge) seam — re-review after Codex P2 fix commit
|
| Finding | Source | Resolution |
|---|---|---|
library_dir inert but consumers prompted for it |
Initial review | README config-table row + setup Output section clarify book-distill is unaffected. ✅ |
Version regression (0.1.0 < book-distill's 0.1.1) |
Initial review | Bumped to 0.1.1. ✅ |
disable-model-invocation: false redundant |
Initial review | Removed from setup frontmatter. ✅ |
| Settings precedence order (Local > Project > User) | Codex P2 | Resolved in 5ed3d6c — see below. ✅ |
| Plugin data orphaned by rename | Codex P2 | Resolved in 5ed3d6c — see below. ✅ |
Codex finding #1 — settings precedence: resolved with extra depth
setup/SKILL.md lines 23–30 now reads:
Look for
library_dir… and resolve the effective value the way Claude Code does — Local (.claude/settings.local.json) > Project (.claude/settings.json) > User (~/.claude/settings.json), local winning. … If a local override is present, say so explicitly — step 4 writes the project (team) value, which stays shadowed by the local override until the developer updates or removes it, so a project-scope edit alone will not change what the plugin actually uses on that machine.
This goes beyond the suggested fix: it not only reverses the read order but instructs the model to surface the shadow-and-override relationship to the user explicitly. A developer with both a project baseline and a local override now sees that context in the setup output rather than silently reconfiguring the wrong scope. The additional Codex P2 concern about reading local settings wholesale is addressed by the key-path-scoped lookup instruction ("Look for library_dir under pluginConfigs["knowledge@melodic-software"].options") — the model is directed to a specific key, not the full file.
Codex finding #2 — plugin data orphan: resolved cleanly
README.md lines 67–73 adds an explicit exception paragraph to the migration note, correctly scoping it to users with an in-progress distillation and explaining why the renames map doesn't cover plugin data. Using "copy" (rather than "move") is the safer instruction — it preserves the old state if the migration is run on the wrong machine or before the rename takes effect.
No new issues introduced
The 5ed3d6c changes are narrowly scoped to the two open findings and introduce nothing structurally new. Plugin manifest, security posture, renames map, and schema correctness are unchanged from the previously-reviewed state.
Overall assessment
All five findings across three review cycles are now resolved. The plugin architecture, schema correctness, security posture, and migration story are solid. This is ready to merge.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
…earing local settings setup: instruct a single-key jq query for library_dir rather than loading .claude/settings.local.json wholesale, since that overlay carries secrets.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_3453ec1a-8b55-46e9-8a35-c0071db5b9f1) |
|
Claude finished @kyle-sexton's task in 1m 14s —— View job PR Review: feat(knowledge) seam — re-review after fix commit
|
| # | Finding | Source | Commit |
|---|---|---|---|
| 1 | library_dir inert but consumers prompted for it |
Initial review | 7cd63a7 ✅ |
| 2 | Version regression (0.1.0 < book-distill's 0.1.1) |
Initial review | 7cd63a7 ✅ |
| 3 | disable-model-invocation: false redundant in setup frontmatter |
Initial review | 7cd63a7 ✅ |
| 4 | Settings precedence order (Local > Project > User) | Codex P2 | 5ed3d6c ✅ |
| 5 | Plugin data orphaned by rename for in-progress distillations | Codex P2 | 5ed3d6c ✅ |
| 6 | Reading local settings wholesale (secret-bearing) | Codex P2 | 43466ac ✅ |
Overall assessment
All six findings across three review cycles are resolved. The plugin architecture, schema correctness, security posture, renames migration map, settings precedence handling, and secret-bearing file read discipline are all solid. Ready to merge.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_d811102c-2e1e-48ae-80f0-95d02c1389c1) |
|
Claude finished @kyle-sexton's task in 1m 0s —— View job PR Review: feat(knowledge) seam — re-review after merge sync
|
| # | Finding | Resolved in |
|---|---|---|
| 1 | library_dir inert but consumers prompted for it |
7cd63a7 ✅ |
| 2 | Version regression (0.1.0 < book-distill's 0.1.1) |
7cd63a7 ✅ |
| 3 | disable-model-invocation: false redundant in setup frontmatter |
7cd63a7 ✅ |
| 4 | Settings precedence order (Local > Project > User) | 5ed3d6c ✅ |
| 5 | Plugin data orphaned by rename for in-progress distillations | 5ed3d6c ✅ |
| 6 | Reading local settings wholesale (secret-bearing) | 43466ac ✅ |
The current state was verified against the actual files:
setup/SKILL.md— reads in correct Local → Project → User order, instructs narrowjqkey-path query forpluginConfigs["knowledge@melodic-software"].options.library_dir, explicitly forbids loading.claude/settings.local.jsonwholesale, surfaces shadow/override relationship to the user when a local override is present.README.md—library_dirconfig-table row correctly scopes it to ingestion pipelines (notbook-distill); migration note includes the plugin-data copy instruction for in-progress distillations.plugin.json—version: "0.1.1", no stray fields.marketplace.json—renamestop-level, terminal chain (book-distill → knowledge), no cycle.
No new issues introduced by the merge.
Overall assessment
Ready to merge. The plugin architecture, schema correctness, security posture, settings-precedence handling, secret-bearing file read discipline, and migration story are all solid. This is a clean seam slice.
There was a problem hiding this comment.
Risk: medium. Cursor Bugbot did not complete (check skipped due to usage limit), so automated review is incomplete. Human review is needed before merge; no reviewers were assigned because no other contributors were identifiable in the affected paths.
Sent by Cursor Approval Agent: Pull Request Router and Approver



Establishes the
knowledgeplugin (category:knowledge) and its shared seams as the first shippable version. This is the seam slice: the two heavy extraction pipelines (youtube,course-digest) land in gated retrofit sub-issues that build on this seam.What's here
plugins/knowledge/—plugin.json, plugin README, and two skills:/knowledge:book-distill(folded from the standalonebook-distillplugin) and/knowledge:setup..claude-plugin/marketplace.json+ root README catalog row.renamesmap for automatic consumer migration.The migration work
book-distillplugin's skill moves in unchanged as knowledge's first skill (git mv, so history follows); the standaloneplugins/book-distill/dir and its marketplace entry are retired. The skill dir and itsname: book-distillfrontmatter stay — it is now invoked as/knowledge:book-distill.renamesmap (verified against current docs)."renames": { "book-distill": "knowledge" }— a top-level marketplace field (Claude Code v2.1.193+; this repo's runtime is 2.1.207). On next session Claude Code loads the plugin under its new name and rewritesenabledPlugins/pluginConfigskeys in user/project/local scopes. Local./source, so noplugin-cache-miss. Old name removed fromplugins[], new name present and terminal — no cycle.library_dirseam. AdirectoryuserConfigoption (default repo root.) — the artifact-landing directory in the consuming repo that the plugin's ingestion pipelines resolve through. Establishes the contract seam 1 that the youtube/course-digest sub-issues build on.setupaction. A re-runnable, idempotent skill that interviews the consumer, infers a sensible artifact location via the convention-resolution ladder, and persistslibrary_dirtopluginConfigs["knowledge@melodic-software"].options(tracked project scope).Decisions
categoryinmarketplace.json, notplugin.jsonknowledgecategory is declaredcategoryis a marketplace-specific field; inplugin.jsonit fails--strictas unrecognized. Deviates from the issue body's literal "plugin.json (category)" wording. Repo precedent: every plugin declares category in the marketplace entry.library_dirdefault =.(repo root)userConfigdefault.CHANGELOG.mdfor the renameValidation
claude plugin validate ./plugins/knowledge --strict— pass (manifest).claude plugin validate . --strict— pass (catalog +renamescycle/termination check).--plugin-dir ./plugins/knowledgeand confirmed both skills resolve under the correct namespace —knowledge:book-distillandknowledge:setup.Refs melodic-software/medley#1373
Note
Medium Risk
Plugin rename affects consumer installs and skill invoke paths; in-progress multi-session distillations can lose resume state unless plugin-data is copied manually.
Overview
Introduces the
knowledgeplugin as the umbrella for ingesting external knowledge, retiring the standaloneplugins/book-distillmarketplace entry and directory while keeping the same distillation skill under/knowledge:book-distill.The marketplace gains a top-level
renamesmap (book-distill→knowledge) so Claude Code can rewriteenabledPlugins/pluginConfigson the next session; docs call out that in-flight distillation resume state in${CLAUDE_PLUGIN_DATA}is not migrated and may need a manual copy.Adds a shared
library_diruserConfig(default repo root) as the artifact-landing seam for future pipelines, plus a new/knowledge:setupskill that interviews the consumer, infers a sensible directory, and persists config to project.claude/settings.json(with narrowjqreads to avoid loading secrets from local settings). Root README andteachskill references are updated from/book-distill:…to/knowledge:book-distill.Reviewed by Cursor Bugbot for commit a4523ee. Bugbot is set up for automated code reviews on this repo. Configure here.