Skip to content
Back to skills

Setup

ASecurity

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.

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 5, 2026
ai-agentsshellbashgit

Works with

  • claude code
  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 2, 2026

npx -y skills add addit-digital/addit-harness --skill setup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Setup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Setup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/addit-digital-setup/badge)](https://www.skillsdirectory.com/skills/addit-digital-setup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: setup
description: 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.
user-invocable: true
argument-hint: "[--scope global|project] [--link] [--plugins]"
---

# 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 `--scope` as 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 `global` as the default recommendation
  since it is what most users want, but let them choose:
  - `global`: places everything under `~/.claude/` — applies to every Claude
    Code session on the machine.
  - `project`: places `CLAUDE.md`, `AGENTS.md`, `rules/`, `references/` bare
    at the current project root, and `settings.json` at
    `./.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 local` keeps
  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
bash "${CLAUDE_PLUGIN_ROOT}/skills/setup/scripts/setup.sh" --scope <global|project> [--link] [--plugins]
```

`--link` symlinks instead of copying, so edits to `rules/`/`settings.json`
track the plugin's own git checkout. Default is copy.

`--plugins` (opt-in) additionally runs `claude plugin marketplace add <source>`
for each `extraKnownMarketplaces` entry and `claude plugin install <id>` for
each `enabledPlugins` key set to `true`, read from the placed `settings.json`
(no hardcoded list; plugins you disabled are skipped). It needs the `claude`
CLI on `PATH` and skips with a message if it is missing. Whether Claude Code
installs `enabledPlugins` by itself on first start is unverified, so use this
flag when you want them installed now. If a nested install fails from inside a
session, run the printed `claude plugin ...` commands in a normal shell.

The script backs up anything it would overwrite to
`~/.claude/.install-backups/<stamp>/` (global) or
`.claude/.install-backups/<stamp>/` (project) and prints a summary of what it
placed and where.

`settings.json` is merged, not replaced: your `hooks`, `statusLine`, `env`
and other keys the template lacks survive, and `enabledPlugins` /
`extraKnownMarketplaces` / `env` are deep-merged with your existing values winning (a
plugin you disabled stays disabled; an `env` value you set is never overwritten). Keys the template owns (`model`,
`permissions`) are updated to the template's values, so a backup is taken
first. Re-running is idempotent. With `--link`, `settings.json` is symlinked
rather than merged.

For `--scope global`, it also retires any leftover unprefixed `agents/`
and `skills/` from a pre-plugin install (the pre-plugin copy installer, since removed,
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.json`
  content), re-run with the same `--scope` to pick up the changes. You don't
  have to remember this yourself: the plugin ships a `SessionStart` hook
  (`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-version` for global,
  `.claude/.addit-harness-setup-version` for project). It's deliberately
  content-based, not plugin-version-based: most releases only touch
  `agents/`/`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.

Files in this skill

  • SKILL.md4.7 KB
  • scripts/setup.sh9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.