This package has two separate workflows: consumer apps install the published package and explicitly copy a selected skill bundle; maintainers validate the package from a source checkout. Installing the package never copies skills automatically.
Install the package in the consuming app. Its redux, redux-saga, typed-redux-saga, and fast-equals runtime dependencies are installed with it:
npm install @augmentcode/themisThe package declares optional React/Preact peers for ReactStore and a Svelte peer for the Svelte-readable entrypoint; install the peer required by the chosen app. For saga tests that follow this repository's examples, install the optional test helper:
npm install -D redux-saga-test-planRun one of these commands from the consuming project root after the package is installed. These are explicit copy/refresh operations, not package-install lifecycle side effects:
npx themis install-skills:react
npx themis install-skills:svelte
npx themis install-skills:streaming
npx themis install-skills:core
npx themis install-skills
npx themis install-skills:allEvery selected bundle:
- copies the selected packaged AI skill bundle into the consuming project root at
.agents/skills/themis/, with skill folders directly underneath (rootSKILL.md,setup/,core/,react/,svelte/,streaming/); - keeps
.agents/skills/themis/as the only copied and manifest-owned skill tree, then creates or reuses.claude/skills/themisas a directory symlink (relative on POSIX, junction on Windows) resolving to that canonical tree; - never overwrites an existing file, directory, or foreign link at
.claude/skills/themis; it preserves the collision and logs a warning while continuing the canonical install; - if a previous install's
installed-skills.ymlmanifest exists there, first removes every file that manifest lists and prunes empty directories, so each install fully refreshes the previous package install (user-authored files not listed in the manifest are preserved); - writes a fresh
.agents/skills/themis/installed-skills.ymlmanifest recording the package name, package version, install target, install timestamp, and the full list of installed relative file paths (the manifest itself is excluded from the list); - removes package-owned skill copies left directly under the legacy flat
.agents/skills/location as a one-time migration for existing consumers; - preserves unrelated project or third-party skills under
.agents/skills/; - excludes generated package artifacts such as
skills/_artifacts; - no-ops when the package is not installed under a consumer
node_modulesdirectory; - logs warnings instead of failing the command.
This keeps package installation side-effect free while still letting humans and AI agents discover and load the same package-specific implementation guidance when requested.
Consuming apps should run package maintenance commands from the app root after the package has been installed and its bin has been linked. These equivalent forms are supported:
./node_modules/.bin/themis help
npm exec -- themis help
npx themis
npx themis help
npx themis install-skills:react
npx themis install-skills:svelte
npx themis install-skills:streaming
npx themis install-skills
npx themis cleanup-skillsnpx themis with no command prints the same help text. Use the smallest matching bundle:
| Command | Skills copied into .agents/skills/themis/ |
|---|---|
npx themis install-skills:react |
root SKILL.md, setup, core, and react |
npx themis install-skills:svelte |
root SKILL.md, setup, core, and svelte |
npx themis install-skills:streaming |
root SKILL.md, setup, core, and streaming |
npx themis install-skills:core |
root SKILL.md, setup, and core |
npx themis install-skills or npx themis install-skills:all |
the complete all-skills bundle |
Each install command refreshes the selected package-owned bundle in .agents/skills/themis/, writes a fresh installed-skills.yml manifest, and reports copied, updated, unchanged, stale-removed, and Claude-link status. Repeating an unchanged command is a no-op for files and reuses a correct compatibility link. User-authored files not listed in the manifest, unrelated skills outside that directory, and non-selected package families are preserved. A collision at .claude/skills/themis is preserved with a warning; the canonical .agents/skills/themis install still proceeds.
If npm package invocation appears to do nothing, verify ./node_modules/.bin/themis exists in the consuming app and run ./node_modules/.bin/themis help directly. If that file is missing, the package is not installed or the package manager has not linked its bin in that app; reinstall or repair the local package install before retrying. In this repository's source checkout, npx/npm exec package-name invocations are not a valid smoke test because the package bin is not linked automatically; use node scripts/cli.mjs help for source-checkout validation.
After installation, verify the CLI, copied bundle, manifest, and compatibility link. This Node command works on POSIX and Windows (the Windows compatibility path is a junction):
npx themis help
node -e "const fs=require('node:fs'); for (const p of ['.agents/skills/themis/SKILL.md','.agents/skills/themis/installed-skills.yml','.claude/skills/themis']) console.log(p, fs.realpathSync(p))"Run the same selected install command whenever the package or desired bundle changes. The manifest-driven refresh removes stale package-owned files from the previous install while preserving files not listed in that manifest.
npm 7+ does not run dependency uninstall lifecycle scripts, so uninstalling the package does not automatically remove copied skill files. Run cleanup first, then uninstall:
npx themis cleanup-skills
# or: npm exec -- themis cleanup-skills
npm uninstall @augmentcode/themisThat helper removes only the files listed in .agents/skills/themis/installed-skills.yml, then the manifest itself, and removes only the owned .claude/skills/themis compatibility link (including a dangling owned link whose canonical target is already absent). It prunes only empty compatibility directories and prints a clear no-op message when no manifest or owned link exists. Foreign .claude paths and unrelated .agents/skills content remain untouched; as a one-time migration it also removes package-owned skill copies left directly under the legacy flat .agents/skills/ location. Remove optional test dependencies only if your app does not use them elsewhere:
npm uninstall -D redux-saga-test-planIf an older package has already been uninstalled, manually remove only package-owned skill files and folders you no longer need:
.agents/skills/themis/(the current install location, including itsinstalled-skills.ymlmanifest).agents/skills/SKILL.md(legacy flat install location).agents/skills/setup(legacy flat install location).agents/skills/svelte(legacy flat install location).agents/skills/core(legacy flat install location).agents/skills/react(legacy flat install location).agents/skills/streaming(legacy flat install location).agents/skills/svelte-redux-toolkit(legacysvelte-redux-toolkitinstalls).agents/skills/init-svelte-redux-toolkit(legacysvelte-redux-toolkitinstalls).agents/skills/migrate-to-svelte-redux-toolkit(legacysvelte-redux-toolkitinstalls).agents/skills/svelte/setup(legacy setup path from older package versions).agents/skills/svelte/migration(legacy setup path from older package versions)
Do not delete .agents/skills as a whole unless you are certain it contains no project or third-party skills you want to keep.
These commands are for maintainers working from a source checkout, not for consumer projects:
pnpm install --frozen-lockfile
node scripts/cli.mjs help
npm run validate:architecture
npm test
npm run build
npm run validate:releaseUse the repository's pnpm-lock.yaml for a clean dependency baseline. Do not substitute consumer npx themis install, cleanup, or uninstall commands for release validation; those commands exercise a downstream app workflow and write under the consuming project's .agents/ and .claude/ paths.
Run npm run validate:architecture before accepting or releasing changes that
touch Redux state, actions, selectors, sagas, or the skills/docs governing those areas. A
passing architecture gate exits 0 and prints
[architecture-validation] no architecture gate violations found; any listed
violation must be fixed or justified with the documented gate ignore comments
before release validation can pass.