Skip to content

Load the Factory skills from the worktree as thirdshift-<skill>, replacing the Claude plugin #391

Closed

Description

@JacobStephens2

Parent

#136

What to build

The Factory skills stop being loaded as a Claude plugin. Instead they're linked into each Run's worktree under thirdshift- names, where Claude Code finds project skills. Nothing changes for a user except the skill names. This is the groundwork that lets Codex (#136) load the same skills the same way. See ADR 0012.

  • Each skill in skills/ is renamed thirdshift-<skill>: its directory, its frontmatter name:, and every reference one Factory skill makes to another. Those references become plain prose, "the thirdshift-code-review skill", with no /thirdshift: sigil, so they read the same under any Harness.
  • thirdshift writes the embedded skills out once per Command. It links each one into the Run's worktree under .claude/skills/, and adds a thirdshift-* pattern for that directory to the repository's .git/info/exclude, once and idempotently. That entry is left in place, since the file is shared by every worktree.
  • The generated plugin manifest and --plugin-dir go away.
  • Every Session prompt's first line invokes its skill as /thirdshift-<skill>. Later mentions of other skills are plain prose. The generated prompts/ page and the Prompts and skills page show the new names.

Acceptance criteria

  • Every session of a Run, a Spec run's Ticket Runs, a Base fix, a Spec review, an Architecture review, each Repair and each Resume finds every thirdshift-* skill in its worktree's .claude/skills/. The fake claude's skills snapshot is taken from the worktree, not from a plugin directory.
  • git status in the worktree shows none of the linked skills, and no session can commit them by accident (git add -A).
  • Running a second Run in the same repository doesn't add a second exclude entry.
  • No session is started with --plugin-dir.
  • Each prompt's first line is /thirdshift-<skill>. No prompt or Factory skill still says /thirdshift:.
  • prompts/ is regenerated (UPDATE_PROMPTS=1 cargo test prompts_page) and its test passes.
  • ADR 0001's consequence about plugin namespacing is marked as replaced by ADR 0012.

Blocked by

None (can start immediately).

Activity

  1. JacobStephens2 commented on Oct 5, 2026

    @JacobStephens2
    OwnerAuthor

    Closed by #400, merged into issue-136 by a thirdshift Merge run.

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-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions