By DannyGoodall
Tracked, human-paced code-change lifecycle on Jujutsu (jj) workspaces for Claude Code. One kebab-case slug names the jj workspace (../<slug>), the bookmark (<type>/<slug>), and the OpenSpec change-id, so the eventual GitHub PR stays coordinated end to end. Skills: triage-change (scope an issue + OpenSpec gate + label), start-change (issue + workspace + optional proposal), change-context (enter a workspace), make-change (implement in the workspace), end-change (push the bookmark, open the PR, link both ways), teardown-change (guarded cleanup after merge). Requires the jj-vcs plugin (all jj mechanics delegate to its jj-vcs:jj skill). The Linear MCP is an optional addon: present -> Linear is the issue tracker; absent -> GitHub Issues via the gh CLI; neither -> the change is still tracked by its OpenSpec folder, jj bookmark, and PR. Issue<->PR linkage is wired explicitly in every mode.
Based on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Implement a change whose OpenSpec proposal and tasks live in a downstream jj WORKSPACE (created by start-change), not the base checkout. Before touching anything it points the tooling at the workspace — cwd for the CLI/tests, Claude Code's native Read/Edit/Write for all workspace file ops — because a base-rooted agent cannot see the change (`openspec` resolves by cwd) and, worse, Serena would SILENTLY edit the wrong checkout (its project stays on base; `claude-code` excludes activate_project). Then it delegates apply mechanics to the OpenSpec apply skill, implements tasks.md, and verifies. Use when the user says "make / implement / apply the change", "do <ID>", or wants to work through the tasks of a change start-change set up in a workspace — the implement step between start-change and end-change. It does NOT push or open the PR (that's end-change) and does NOT re-derive the design (that's start-change).
Kick off a tracked code change on jj workspaces: create the tracking issue, spin up a dedicated jj workspace for it, and — only when the change touches OpenSpec specs — author the proposal via the OpenSpec propose skill. One slug names the workspace (../<slug>), the bookmark (<type>/<slug>), and the OpenSpec change-id, so everything (including the eventual PR) stays coordinated. Use when the user wants to "start a change", "open/spin up a workspace for this", or "kick off a change/feature/bugfix" before implementing. Setup only — stops once the issue, workspace, and (if needed) approved proposal exist; does NOT implement and does NOT open the PR. The issue tracker is pluggable (Linear, GitHub Issues, or none).
Tear down a shipped change's jj workspace, bookmark, and working directory once its PR has merged, so workspaces don't accumulate. Takes an issue id (e.g. <ID>) or a change slug. DESTRUCTIVE — before removing anything it runs a safety assessment (PR merged? bookmark pushed and current? uncommitted or untracked files that would be lost?) then a MANDATORY multiple-choice confirmation gate. Use AFTER end-change + merge, when the user says "tear down <X>", "clean up the workspace for <ID>", "remove the <slug> workspace", or wants to prune a finished change. Removes only — it does not start the next change (that's start-change) and does not merge anything.
Deep technical triage of a SINGLE issue: read the issue, the governing OpenSpec specs, and the code (via Serena symbol tools), then return a determination — what the fix actually requires, whether it impacts OpenSpec or is a code-only change that leaves specs and code in sync, plus a proposed type/slug and fix-sketch. Applies a canonical triage label (ready-for-agent / ready-for-human / needs-info) via the active issue-tracking binding as its final step. Understands; does NOT fix and does NOT create a workspace. Use to "triage this change/bug", "scope <ID>", "what would it take to fix X", "does this touch the spec / need OpenSpec", or "is this ready for an agent". Complements (does not replace) the board-level `triage` skill, and feeds `start-change`.
Redirect the conversation's working context to the jj WORKSPACE that holds a change (proposal/tasks/code) that does NOT exist in the base checkout. Given an issue reference (e.g. <ID>) or a change slug (e.g. lane-stacking), it resolves the workspace dir (../<slug>), verifies it, loads the change's proposal/tasks/design (or, code-only, the issue body), and states a working contract — cwd = the workspace for every CLI/test/dev command, all workspace file ops via native Read/Edit/Write/Grep/Glob on absolute ../<slug>/ paths, Serena reserved for base-checkout work — so the agent operates there for the rest of the session. Use at the START of a conversation, in the same agent (no second instance), to "focus on workspace X" without re-explaining it each turn. Triggers: "/change-context <ID>", "focus on the workspace for <slug>", "work in the jj workspace called X". It only SETS context — it does not implement, push, or open a PR (that's make-change / end-change). The issue tracker is pluggable.
jj-openspec-linear is a Claude Code marketplace that ships a single plugin,
change-lifecycle — a tracked, human-paced code-change lifecycle built on
three things working together:
jj-vcs plugin;
this plugin never reinvents jj.gh CLI) as a fallback, or no tracker at all. Issue tracking is
a pluggable binding discovered at runtime, never a hard dependency.The lifecycle takes a code change from triage through to a reviewable GitHub pull request, one human-paced phase at a time:
triage-change → start-change → make-change → end-change → (merge) → teardown-change
▲
change-context
(the "enter the workspace" primitive)
This repository is implemented and spec-driven. Every behaviour documented
here is pinned by a validated OpenSpec change under openspec/changes/, and the
corresponding manifests and skills are in place under
plugins/change-lifecycle/:
| Change | Capability specs | Status |
|---|---|---|
plugin-scaffold-and-distribution | plugin-packaging | ✓ archived |
tracked-change-lifecycle | change-lifecycle, workspace-context, change-triage | ✓ archived |
optional-issue-tracker-binding | issue-tracking | ✓ archived |
workflow-documentation | documentation | ✓ archived |
cw-command | workspace-shell-tool (the cw helper + .worktreeinclude) | ✓ archived |
All changes have been archived: their delta specs are folded into
openspec/specs/ — now the source of truth — and the full
proposal → spec → tasks history is preserved under openspec/changes/archive/.
jj-vcs pluginchange-lifecycle delegates all jj mechanics to the jj-vcs plugin (the
jj-vcs:jj skill). It is a REQUIRED prerequisite. Marketplace manifests cannot
declare cross-plugin install dependencies, so each lifecycle skill detects the
missing prerequisite at runtime and stops with a clear, actionable message
rather than shelling out to raw jj.
# jj itself, colocated with git so GitHub/PRs still work
brew install jj # or your platform's package
cd your-repo && jj git init --colocate
# the jj reference/vocabulary layer the lifecycle delegates to
claude plugin marketplace add schpet/toolbox
claude plugin install jj-vcs@toolbox
Issue tracking is OPTIONAL. The plugin installs and runs with no Linear MCP present. At runtime each issue-touching skill selects a tracker by fixed precedence:
mcp__linear-server__* tools are present in the session.gh is installed and authenticated
(gh auth status succeeds).Linear is never a hard requirement. See docs/optional-components.md.
# 1. register this repo as a marketplace (GitHub, or a local clone path)
claude plugin marketplace add DannyGoodall/jj-openspec-linear # or /path/to/jj-openspec-linear
# 2. refresh it — also how you pick up new plugin versions later
claude plugin marketplace update jj-openspec-linear
# 3. install the single plugin
claude plugin install change-lifecycle@jj-openspec-linear
Restart Claude Code after installing — newly installed skills only take effect in sessions started after install.
The lifecycle is driven by natural-language requests; the skill descriptions are trigger-rich, so plain phrasings route to the right phase. A full run:
# 1. TRIAGE — understand one issue: type, slug, OpenSpec gate, label. No fix, no workspace.
you: triage PTS-100
# 2. START — create the issue (if needed), spin up the ../<slug> workspace + bookmark,
# and author the OpenSpec proposal when the gate says yes. Setup only.
you: start a change for PTS-100
# 3. MAKE — enter the workspace (via change-context), implement tasks.md, validate.
# Does not push, does not open a PR.
you: make the change
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimnpx claudepluginhub dannygoodall/jj-openspec-linear --plugin change-lifecycleConcurrent multi-agent orchestration on Jujutsu (jj) workspaces: the jj-delegate mechanism, the jj-workspace-worker agent, plus snapshot and guard hooks.
OpenSpec binding for jj-concurrent: /jj-openspec backgrounds an OpenSpec verb in its own jj workspace. Requires the jj-concurrent plugin and an OpenSpec-managed repo (openspec/ + opsx skills).
UI/UX design intelligence. 67 styles, 161 palettes, 57 font pairings, 25 charts, 15 stacks (React, Next.js, Vue, Svelte, Astro, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui, Nuxt, Jetpack Compose). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.
Comprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
This skill should be used when users need to generate ideas, explore creative solutions, or systematically brainstorm approaches to problems. Use when users request help with ideation, content planning, product features, marketing campaigns, strategic planning, creative writing, or any task requiring structured idea generation. The skill provides 30+ research-validated prompt patterns across 14 categories with exact templates, success metrics, and domain-specific applications.
Develop, test, build, and deploy Godot 4.x games with Claude Code. Includes GdUnit4 testing, web/desktop exports, CI/CD pipelines, and deployment to Vercel/GitHub Pages/itch.io.
Upstash Context7 MCP server for up-to-date documentation lookup. Pull version-specific documentation and code examples directly from source repositories into your LLM context.
A growing collection of Claude-compatible academic workflow bundles. Covers scientific figures, manuscript writing and polishing, reviewer assessment, citation retrieval, data availability, paper reading, literature search, response letters, paper-to-PPTX conversion, and evidence-grounded Chinese invention patent drafting. Rules are organized as reusable skill folders with explicit workflows and quality checks.