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
A repo that ships its skills as a plugin (Claude Code / Codex plugin marketplace) has its instruction surface loaded in other repos: the SKILL.md files live in the producer repo, but every session that exercises them runs in a consumer repo. Neither --scope project nor --scope user fits that shape today.
What I tried (backpass 0.1.19, Windows 11, node 22)
Producer: gtm-orchestrator, plugin.json ships 37 skills from .claude/skills/. Consumers: 7 client repos that install the plugin from a marketplace. Consumer transcripts reference the skills by their plugin-cache path, e.g. ~/.codex/plugins/cache/gtm-orchestrator/gtm-orchestrator/2.0.1/.claude/skills/campaign-copywriting/SKILL.md, so the evidence is there.
--scope project --target campaign-copywriting in a consumer repo with skillsDir pointed at the producer checkout: rejected by assertSkillsDirInsideRepo (skills.js ~L361, lexical + realpath check, so a junction/symlink does not pass either).
Copying .backpass/evidence/*.json from a consumer into the producer's .backpass/evidence/: evidence key embeds the memory-surface hash (state.jsevidenceKey), so it is marked stale and re-analyzed against the producer's own AGENTS.md, which the consumer session never loaded.
A way to train a producer repo's skills from consumer sessions. Two shapes that would work, either is fine:
--scope plugin (or a plugin block in .backpassrc.json): memory surface = the producer's skill descriptions (plus optional memory file), transcripts = sessions in the listed consumer projects (--project globs, like user scope), writes = the producer's SKILL.md files. Essentially user-scope folding pointed at a project's skills dir.
Or, smaller: let --scope project accept an external skillsDir when the config opts in explicitly (e.g. "skillsDirs": [{"path": "...", "external": true}]), plus --project <glob> in project scope to pull consumer sessions.
Nice to have: record which skill a transcript actually loaded (the plugin-cache path is already in the transcript) so --target <skill> can sample only sessions that exercised that skill, and gap items can carry a skill attribution alongside domain.
Summary
A repo that ships its skills as a plugin (Claude Code / Codex plugin marketplace) has its instruction surface loaded in other repos: the SKILL.md files live in the producer repo, but every session that exercises them runs in a consumer repo. Neither
--scope projectnor--scope userfits that shape today.What I tried (backpass 0.1.19, Windows 11, node 22)
Producer:
gtm-orchestrator,plugin.jsonships 37 skills from.claude/skills/. Consumers: 7 client repos that install the plugin from a marketplace. Consumer transcripts reference the skills by their plugin-cache path, e.g.~/.codex/plugins/cache/gtm-orchestrator/gtm-orchestrator/2.0.1/.claude/skills/campaign-copywriting/SKILL.md, so the evidence is there.--scope project --target campaign-copywritingin a consumer repo withskillsDirpointed at the producer checkout: rejected byassertSkillsDirInsideRepo(skills.js~L361, lexical + realpath check, so a junction/symlink does not pass either)..backpass/evidence/*.jsonfrom a consumer into the producer's.backpass/evidence/: evidencekeyembeds the memory-surface hash (state.jsevidenceKey), so it is marked stale and re-analyzed against the producer's own AGENTS.md, which the consumer session never loaded.--scope userhas the right pieces (external skillsDirs viaallowExternal, cross-project fold with--project <glob>,minGapProjects), but it writes to the user memory file, and on Windows it is blocked by [Bug] Windows: --scope user fails with "could not secure state directory ... as mode 700 (got 666)" #115.Ask
A way to train a producer repo's skills from consumer sessions. Two shapes that would work, either is fine:
--scope plugin(or apluginblock in.backpassrc.json): memory surface = the producer's skill descriptions (plus optional memory file), transcripts = sessions in the listed consumer projects (--projectglobs, like user scope), writes = the producer's SKILL.md files. Essentially user-scope folding pointed at a project's skills dir.--scope projectaccept an externalskillsDirwhen the config opts in explicitly (e.g."skillsDirs": [{"path": "...", "external": true}]), plus--project <glob>in project scope to pull consumer sessions.Nice to have: record which skill a transcript actually loaded (the plugin-cache path is already in the transcript) so
--target <skill>can sample only sessions that exercised that skill, and gap items can carry askillattribution alongsidedomain.Related: #115 (user scope on Windows).