Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/jspw/exciton/claude-mdgit clone --depth 1 https://github.com/jspw/excitonWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/jspw/exciton/claude-md)<a href="https://agentmods.dev/instructions/jspw/exciton/claude-md"><img src="https://agentmods.dev/badge/instructions/jspw/exciton/claude-md.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.02489 | $0.02489 |
| Opus 5 | $0.01244 | $0.01244 |
| Sonnet 5 | $0.00498 | $0.00498 |
| Haiku 4.5 | $0.00249 | $0.00249 |
Grade A, and why
exciton CLAUDE.md scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
7. **`launch.ts`** — spawns `claude` with inherited stdio (`spawnSync`, not `execve` — Node has none) and forwards its exit code; builds argv as `--settings <payload>? --plugin-dir <dir>... <forwarded args>`. How it starts
The opening of the file, as written. The whole thing — 65 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
exciton is a CLI (exciton / xc) that runs Claude Code with an agentic workflow framework (currently only superpowers) dialled to a chosen profile — full, or --no-hooks (skills stay callable, nothing auto-fires) — for a single session, without writing anything under ~/.claude. A framework must be added (exciton add) before it will run; first invocation with no config runs an onboarding walkthrough. It does this using two documented Claude Code primitives: --settings '{"enabledPlugins":{...}}' to disable plugins for the session, and --plugin-dir <dir> to add one in. See MECHANISM.md for the full mechanism and verification evidence, PRODUCT.md for scope, and QA.md for the reasoning behind specific design decisions.
Commands
npm run build # tsc: src/ -> dist/
npm test # unit tests: node --test --test-concurrency=2 test/*.test.ts
npm run test:integration # integration tests: shells out to a real `claude` binary; needs claude installed
Run a single unit test file directly, e.g.:
node --test --test-concurrency=2 test/resolve.test.ts
There is no separate lint command. tsc (via npm run build) is the type check; strict mode is on.
Source files are plain .ts run directly by Node (no build step needed for tests) — this repo relies on Node ≥22.18's unflagged TypeScript stripping, which is why that version is the floor in package.json engines and why CI matrixes 22.18.0 and 24.x. npm test runs test/*.test.ts directly, not compiled output.
Architecture
The whole CLI is ~1,800 lines across src/. Read the files, not a summary — but here's the shape of how a run flows through them, since that requires connecting several files:
cli.ts— entry point.parseArgssplits argv on--(everything after is forwarded verbatim toclaude); before it, one positional arg is the framework name/path/spec,--no-hookspicks the profile, subcommands (add,remove,update,list,clean,help,version) short-circuit before framework resolution.run()orchestrates the rest of the pipeline below and is the place to look first when tracing behavior. It also fires onboarding on first contact and enforcesassertAdded— a framework absent from the registry does not run.registry.ts—~/.exciton/config.json: which frameworks have been added and which copy each runs from (installed= Claude's,own= exciton's clone). Split into two I/O functions taking an injectable path and six pure ones.onboardedAtdistinguishes "never onboarded" from "onboarded and chose nothing" — without it, opting out would re-trigger the walkthrough forever.resolve.ts(resolvePlugin) — turns a bare name, a full plugin id (name@marketplace— the marketplace half is ignored, since exciton has no version syntax), or a path spec into aResolved(dir, version, sha, origin). Tries, in order: path spec → already-installed plugin (installed.ts) → a marketplace entry (marketplace.ts) cloned viafetch.tsinto exciton's own cache.{ ownCopy: true }skips the installed lookup — without itsource: 'own'would silently resolve to Claude's copy and the choice would be decorative.fetch.tsresolves the newest release tag (git ls-remote --tags --refs, numeric compare, pre-releases excluded) and clones it in onegit clone --depth 1 --branch <tag>.frameworks.ts— theFRAMEWORKSset (currently justsuperpowers) is the single source of truth for what exciton is allowed to manage.cli.tsusesassertManaged/assertSingleFrameworkto refuse anything not in this set and refuse naming two frameworks at once — frameworks are mutually exclusive by design (they compete to define how a session is conducted), while ordinary plugins are left completely untouched.settings.ts(collectPluginIds) — readsenabledPluginsacross every settings scope (user, project, project-local, enterprise-managed) to find every managed-framework id currently enabled anywhere, even ones not named on the command line — those must still be suppressed, or a second framework would keep silently governing the session.buildDisablePayloadturns that into the--settingsJSON, touching only theenabledPluginskey (any other key would outrank project/local settings).stage.ts(stagePlugin) — for thefullprofile, points--plugin-dirstraight at the resolved source (zero copy). Fornohooks, atomically builds a cached copy under~/.exciton/staged/with thehooks/directory filtered out, keyed by name+version+sha so it's built once. Hooks are discovered by convention in Claude Code, so removing the directory is enough to make nothing auto-fire while skills remain callable.launch.ts— spawnsclaudewith inherited stdio (spawnSync, notexecve— Node has none) and forwards its exit code; builds argv as--settings <payload>? --plugin-dir <dir>... <forwarded args>.commands/list.ts,commands/manage.ts,commands/cache.ts—listcross-references installed plugins against enabled ids, hook presence, and the registry, split into a frameworks section (what exciton runs) and an untouched-plugins section;manage.tsholdsadd/remove/updatebehind injectable deps (chooseSource,fetch,interactive) so the decision trees are tested without a terminal;cleanempties the cache but refuses while a live session is running from it, detected by scanningpsfor--plugin-dirunder the exciton root.onboarding.ts,prompt.ts,ui.ts— the interactive layer.onboarding.tsis the first-run walkthrough;prompt.tsis a hand-rolled arrow-keyselect/multiselect;ui.tsholds every user-facing shape.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 65 lines · 2,489 tokens per session scan A dea39c337a17
exciton CLAUDE.md is an instructions file published in the GitHub repository jspw/exciton (3 stars, last pushed 15d ago), licensed MIT. It adds 2,489 tokens to every session, about $0.0124 per session on Opus 5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
markifact-mcp GEMINI.md
Instructions for markifact/markifact-mcp, covering markifact, the 8 tools, discover → inspect → run, connection vs account and reporting workflow.
harness-anchor CLAUDE.md
Instructions for Redtropig/harness-anchor, covering harness-anchor — contributor & ai collaborator guidelines, if you are an ai agent editing this plugin, design invariants (do not break), shell hazards no tool in this repo catches and authoring a new skill (when explicitly asked).
Version-Sentinel CLAUDE.md
Claude Code instructions for KSEGIT/Version-Sentinel, covering version sentinel, project structure, supported ecosystems, how it works and prerequisites.
Version-Sentinel GEMINI.md
Gemini CLI instructions for KSEGIT/Version-Sentinel, covering version-sentinel (gemini cli extension), how it works, intentional pins, auditing drift and escape hatch.
magi-workflow CLAUDE.md
Instructions for howar31/magi-workflow, covering what this is, slash commands, subagents, project state model and project document tiers.
Looptimal CLAUDE.md
Instructions for Renn-Labs/Looptimal, covering looptimal — repo guidance for ai agents, build journal — capture the concepts, not the changelog and — .