Skip to content

[Feature] Plugin scope: train a producer repo's skills from sessions in consumer repos #117

Description

@MitchellkellerLG

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 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.

  1. --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).
  2. Copying .backpass/evidence/*.json from a consumer into the producer's .backpass/evidence/: evidence key embeds the memory-surface hash (state.js evidenceKey), so it is marked stale and re-analyzed against the producer's own AGENTS.md, which the consumer session never loaded.
  3. --scope user has the right pieces (external skillsDirs via allowExternal, 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 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.

Related: #115 (user scope on Windows).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-prIssue is in scope and ready for a PR

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions