Setup
Use once, right after installing the addit-harness Claude Code plugin, to place the parts a plugin can't carry natively (CLAUDE.md, AGENTS.md, path-scoped rules/, references/, settings.json) into ~/.claude or the current project. Also use to re-sync after a plugin update, or to switch between global and project scope.From its SKILL.md
npx -y skills add addit-digital/addit-harness --skill setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.7 KB, as published. Nobody here has run it
addit-harness setup
The addit-harness plugin ships agents/ and skills/ — those are already
live once the plugin is installed, nothing to do. This skill places the rest:
CLAUDE.md, AGENTS.md, rules/ (path-scoped language conventions),
references/, and settings.json — none of which Claude Code plugins can
carry natively (no plugin-level memory file, no path-scoped auto-load rules,
no plugin-carried permissions/model).
Choosing a scope — ask, don't silently default
--scope changes where files land in a way that's annoying to undo cleanly
(global touches every Claude Code session on the machine; project touches
just the current repo). Don't guess:
- If the user already passed
--scopeas an argument to this skill, use it as given — no need to ask. - If they didn't, and the conversation doesn't already make the intent
obvious (e.g. "just try it here" / "in this repo only" → project; "on my
machine" or no project context at all → global), ask which they want
before running anything. Offer
globalas the default recommendation since it matchesinstall.sh's existing behavior, but let them choose:global: places everything under~/.claude/— applies to every Claude Code session on the machine.project: placesCLAUDE.md,AGENTS.md,rules/,references/bare at the current project root, andsettings.jsonat./.claude/settings.json— matches Claude Code's own memory-file convention (project memory at root, project settings nested under.claude/) and only applies inside this one project.
- Mention while asking that the plugin itself can independently be scoped
too (
/plugin install addit-harness@addit --scope localkeeps agents/skills confined to this repo as well) — see the README's Install section for both mechanisms together.
What to run
Once the scope is settled, run the bundled script with the Bash tool:
bash "${CLAUDE_PLUGIN_ROOT}/skills/setup/scripts/setup.sh" --scope <global|project> [--link]
--link symlinks instead of copying, so edits to rules//settings.json
track the plugin's own git checkout. Default is copy.
The script backs up anything it would overwrite (matching install.sh's
existing behavior) and prints a summary of what it placed and where.
For --scope global, it also retires any leftover unprefixed agents/
and skills/ from a pre-plugin install (install.sh --target claude
used to copy those straight into ~/.claude/agents and ~/.claude/skills
unprefixed — the plugin now exposes the same content as
addit-harness:<name>, so the old copies are stale duplicates). A legacy
install predates the plugin, so its content has usually drifted from
whatever the plugin ships today — exact-match wouldn't catch most real
duplicates. Instead it compares line-level similarity: a name match at or
above 50% similar is treated as the same file at a different revision (backed
up, then removed — so even a wrongly-flagged heavy customization is
recoverable from the backup, never destroyed outright); anything less
similar is left in place and reported, since it's more likely a genuinely
unrelated file that happens to share the name.
When to re-run
- After the plugin auto-updates (new
rules//references//settings.jsoncontent), re-run with the same--scopeto pick up the changes. You don't have to remember this yourself: the plugin ships aSessionStarthook (hooks/check-setup-version.sh) that hashes just the files this script copies (CLAUDE.md,AGENTS.md,rules/,references/,settings.json) and compares it against a marker this script writes on each run (~/.claude/.addit-harness-setup-versionfor global,.claude/.addit-harness-setup-versionfor project). It's deliberately content-based, not plugin-version-based: most releases only touchagents//skills//hooks/, which the plugin loader already serves live and need no re-sync — a version-only check would nag on every release regardless of whether it touched anything this skill actually copies. It also stays silent for a scope you've never run setup for — it only nags about a sync you've already opted into. - To switch scope later (e.g. tried
--scope project, now want it everywhere), re-run with--scope global— it's additive, doesn't remove the project-scoped files.