loadout-ai 0.2.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/MASTER_PLAN.md +141 -33
  3. package/README.md +160 -255
  4. package/dashboard/app.js +4 -4
  5. package/dashboard/index.html +4 -4
  6. package/dist/src/cli.js +189 -32
  7. package/dist/src/core/active-set.js +37 -2
  8. package/dist/src/core/adapters.js +10 -0
  9. package/dist/src/core/adopt.js +165 -32
  10. package/dist/src/core/agent-health-score.js +2 -2
  11. package/dist/src/core/catalog-coverage.js +2 -1
  12. package/dist/src/core/catalog-install.js +8 -1
  13. package/dist/src/core/catalog-release.js +2 -1
  14. package/dist/src/core/cli-guide.js +101 -0
  15. package/dist/src/core/completion.js +3 -0
  16. package/dist/src/core/conformance.js +74 -0
  17. package/dist/src/core/install.js +36 -3
  18. package/dist/src/core/mcp-recipes.js +21 -0
  19. package/dist/src/core/profile-state.js +101 -0
  20. package/dist/src/core/profiles.js +9 -4
  21. package/dist/src/core/ranking.js +1 -1
  22. package/dist/src/core/readme-claims.js +10 -0
  23. package/dist/src/core/readme-facts.js +40 -0
  24. package/dist/src/core/recommend.js +9 -3
  25. package/dist/src/core/remove.js +6 -7
  26. package/dist/src/core/runtime-tools.js +10 -2
  27. package/dist/src/core/scheduler.js +4 -3
  28. package/dist/src/core/snapshot.js +58 -13
  29. package/dist/src/core/state.js +13 -3
  30. package/dist/src/core/transaction.js +2 -1
  31. package/dist/src/core/uninstall.js +133 -0
  32. package/dist/src/core/update.js +87 -58
  33. package/dist/src/dashboard.js +5 -2
  34. package/dist/src/shared/schemas.js +69 -0
  35. package/docs/FEATURE_TEST_MATRIX.md +16 -0
  36. package/docs/README_RESEARCH.md +36 -0
  37. package/docs/RELEASE_REVIEW.md +31 -5
  38. package/docs/REPOSITORY_STABILIZATION.md +190 -0
  39. package/docs/TESTING.md +75 -2
  40. package/docs/USER_TEST_GUIDE.md +202 -0
  41. package/docs/assets/loadout-hero.svg +259 -0
  42. package/docs/assets/loadout-mark.svg +54 -0
  43. package/docs/evidence/live-checks-2026-07-19.json +22 -0
  44. package/docs/evidence/live-checks.schema.json +28 -0
  45. package/docs/evidence/readme-claims.json +286 -0
  46. package/docs/superpowers/plans/2026-07-19-relatable-readme-hero.md +283 -0
  47. package/docs/superpowers/specs/2026-07-19-relatable-readme-hero-design.md +80 -0
  48. package/package.json +8 -4
  49. package/SIMPLE_PLAN.md +0 -44
package/README.md CHANGED
@@ -1,338 +1,243 @@
1
- # Loadout
1
+ <p align="center">
2
+ <img src="./docs/assets/loadout-hero.svg" alt="A developer arranging extensions from a messy, unmanaged group into organized loadout slots" width="960">
3
+ </p>
2
4
 
3
- **One CLI that finds, installs, updates, and rolls back useful extensions for AI coding agents.**
5
+ <h1 align="center">Loadout</h1>
4
6
 
5
- Loadout works with Codex, Claude Code, Cursor, Gemini CLI, OpenCode, Hermes, Windsurf, Cline, GitHub Copilot, Roo Code, Kiro CLI, and Junie on macOS, Linux, and Windows.
7
+ <p align="center"><strong>Agent extensions, under control.</strong></p>
6
8
 
7
- It solves a simple problem: useful skills and MCP tools are scattered across hundreds of repositories. Loadout brings them into one place, checks what is actually inside, shows every change before making it, and keeps a snapshot so you can undo it.
9
+ <p align="center">
10
+ A local CLI for inspecting, previewing, installing, and undoing managed extensions for AI coding agents.
11
+ </p>
8
12
 
9
- ## Start here
13
+ <p align="center">
14
+ <a href="https://github.com/VirajMishra1/loadout/actions/workflows/ci.yml"><img src="https://github.com/VirajMishra1/loadout/actions/workflows/ci.yml/badge.svg" alt="CI status"></a>
15
+ <a href="./package.json"><img src="https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js&amp;logoColor=white" alt="Node.js 20 or newer"></a>
16
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"></a>
17
+ </p>
10
18
 
11
- You need Node.js 20 or newer and Git.
19
+ <p align="center">
20
+ <a href="#how-it-works">How it works</a> ·
21
+ <a href="#install">Install</a> ·
22
+ <a href="#profiles">Profiles</a> ·
23
+ <a href="#trust-and-limits">Trust</a> ·
24
+ <a href="#command-reference">Commands</a> ·
25
+ <a href="#development">Development</a>
26
+ </p>
12
27
 
13
- ```bash
14
- npm install --global loadout-ai@0.2.0
15
- loadout --version
16
- loadout upgrade
17
- ```
28
+ > [!IMPORTANT]
29
+ > Installation is version-pinned so the code you test matches these docs. The commands below target `loadout-ai@0.4.0`; review the preview before every apply.
18
30
 
19
- `loadout upgrade` is a read-only preview. It detects your installed agents, checks what you already have, scans the current project, recommends useful additions, and shows the exact files it would change.
31
+ ## How it works
20
32
 
21
- When the preview looks right:
22
-
23
- ```bash
24
- loadout upgrade --yes
25
- ```
33
+ **Choose -> Inspect -> Preview -> Apply -> Undo**
26
34
 
27
- Every applied change creates a snapshot. Undo the latest change with:
35
+ 1. **Choose** a bounded profile or explicit packages.
36
+ 2. **Inspect** pinned source and catalog metadata separately before setup.
37
+ 3. **Preview** detected agents, aggregate repository, directory, and collision counts, warnings, skipped entries, and package IDs needing approval without changing agent target files.
38
+ 4. **Apply** by rerunning with `--yes`; Loadout recomputes from current state before using a snapshot-backed transaction.
39
+ 5. **Undo** the latest supported mutation with drift checks that protect later edits.
28
40
 
29
- ```bash
30
- loadout rollback
31
- ```
41
+ ### Abridged terminal transcript
32
42
 
33
- ## Choose how much you want
43
+ This is an explicitly abridged transcript from a disposable, single-Codex Stable run. A literal `…` marks omitted fetch output; `<snapshot-id>` is a variable placeholder because snapshot IDs vary.
34
44
 
35
- | Mode | Best for | What happens |
36
- | ----------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
37
- | **Stable** | Almost everyone | Installs 30 high-value everyday skills from four selected sources. This is the default. |
38
- | **Power** | Users who want a larger active toolkit | Selects cross-project skills from eight major collections. The current preview prepares 50 skill directories and quarantines flagged individual skills. |
39
- | **Maximum** | People who want the largest possible library | Downloads every usable skill in the 50-repository catalog into a disabled library. It does not flood every agent with 1,000+ active skills. |
40
- | **Custom** | Users who know exactly what they want | Installs only the package IDs they choose. |
45
+ ```console
46
+ $ loadout setup --mode stable --agents codex
47
+
48
+ Loadout: Stable Boost
49
+ Detected agents: Codex
50
+ Catalog selection: 4 repositories
51
+ Ready to install: 4 skill repositories (30 agent skill directories)
52
+ Preview complete; nothing was changed. Re-run with --yes to install this exact screened plan.
41
53
 
42
- Preview any mode first:
54
+ $ loadout setup --mode stable --agents codex --yes
55
+
56
+ Loadout installed 4 repositories for 1 agent(s). Snapshot: <snapshot-id>
43
57
 
44
- ```bash
45
- loadout setup --mode stable
46
- loadout setup --mode power
47
- loadout setup --mode maximum
58
+ $ loadout rollback
59
+ Restored snapshot <snapshot-id>
48
60
  ```
49
61
 
50
- Apply the chosen plan only after reading it:
62
+ The final preview sentence above is captured CLI wording. A later `--yes` invocation recomputes the plan from pinned sources and current agent and filesystem state; it does not persist or prove identity with the earlier preview.
51
63
 
52
- ```bash
53
- loadout setup --mode stable --yes
54
- loadout setup --mode power --yes --approve-risk
55
- loadout setup --mode maximum --yes --approve-risk
56
- ```
64
+ Preview may populate Loadout's own cache; it leaves agent target files unchanged. Review its aggregate counts, warnings, skipped entries, and package IDs needing approval before deciding whether to run a later apply command.
57
65
 
58
- Maximum currently finds 1,158 usable skill directories across 29 skill repositories and keeps them disabled until needed. Nineteen MCP-only repositories remain separate setup choices because MCP servers may need credentials, local software, or broader permissions.
66
+ ## Why Loadout
59
67
 
60
- ## How Loadout chooses repositories
68
+ Skills, plugins, MCP servers, and agent settings tend to accumulate one experiment at a time. Eventually it becomes hard to remember what is installed, where it came from, or how to undo it. In a game, a loadout is the deliberate set of tools chosen before a mission. Loadout brings that same discipline to AI coding agents: inspect the available equipment, choose intentionally, apply it through managed changes, and remove or roll it back later.
61
69
 
62
- Loadout does not install every repository above an arbitrary star count. Stars help discovery, but popularity alone cannot show whether a repository is maintained, duplicated, unsafe, incompatible, or even useful for your work.
70
+ - **One managed inventory.** List installed packages, inspect drift, and track what Loadout owns across configured agent paths.
71
+ - **Preview by default.** Setup, updates, removal, MCP recipes, and uninstall expose a plan before their supported writes.
72
+ - **Recoverable changes.** Snapshots and managed-file hashes support rollback while refusing to overwrite later user edits.
63
73
 
64
- The selection process is:
74
+ ## Install
65
75
 
66
- 1. **Discover broadly.** Search GitHub, Hacker News, skills.sh, and the official MCP Registry.
67
- 2. **Inspect the real contents.** Find skills, MCP declarations, plugins, commands, agents, and executable setup requirements.
68
- 3. **Check trust evidence.** Record the exact Git commit, license status, source paths, maintenance signals, overlaps, and static safety findings.
69
- 4. **Compare like with like.** A testing tool is compared with testing tools, not with an unrelated design skill.
70
- 5. **Choose a tier.** Stable is the strongest bounded default; Power is broader; Maximum keeps the full reviewed library available.
71
- 6. **Keep watching.** New candidates and changes are recorded every day, but nothing is silently promoted or installed.
76
+ You need Node.js 20 or newer and Git.
72
77
 
73
- The bundled catalog contains **50 credited public repositories** across 37 categories. Thirty-one contain skills and 19 are MCP-only. See every source, direct repository link, pinned commit, component type, and license status in **[Catalog and upstream credits](./docs/CATALOG.md)**.
78
+ ```bash
79
+ npm install --global loadout-ai@0.4.0
80
+ loadout --version
81
+ loadout guide
82
+ ```
74
83
 
75
- Loadout does not claim there is one universally “best” configuration. “Recommended” means the strongest choice supported by the evidence and policy currently stored in Loadout, not a permanent verdict for every person or project.
84
+ For source development instead:
76
85
 
77
- ## Get recommendations for the current project
86
+ ```bash
87
+ git clone https://github.com/VirajMishra1/loadout.git
88
+ cd loadout
89
+ npm ci
90
+ npm run build
91
+ npm link
92
+ loadout --version
93
+ ```
78
94
 
79
- Yes—Loadout can inspect a project and recommend what belongs in its working set.
95
+ For a disposable first success, run:
80
96
 
81
97
  ```bash
82
- loadout recommend --project .
98
+ loadout demo
83
99
  ```
84
100
 
85
- This reads local project metadata such as `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, framework dependencies, and test configuration. It does not upload your code.
101
+ The demo uses temporary state and cleans it up; it does not write to your normal agent configuration. See the [user test guide](./docs/USER_TEST_GUIDE.md) if linking, `PATH`, networking, risk approval, or rollback needs attention.
86
102
 
87
- If you downloaded Maximum, use project-aware optimization to activate only the most relevant reviewed skills:
103
+ ## Stable workflow
88
104
 
89
105
  ```bash
90
- loadout optimize --project . # preview
91
- loadout optimize --project . --limit 30 # preview with a smaller cap
92
- loadout optimize --project . --limit 30 --yes
93
- ```
106
+ # Preview for detected agents
107
+ loadout setup --mode stable
94
108
 
95
- You can still override the result:
109
+ # Recompute from current state and apply after reviewing the preview
110
+ loadout setup --mode stable --yes
96
111
 
97
- ```bash
98
- loadout optimize --project . --pin package-id/skill-name
99
- loadout enable package-id/skill-name --yes
100
- loadout disable package-id/skill-name --yes
112
+ # Inspect managed state, then undo the latest supported mutation
113
+ loadout list
114
+ loadout health --explain
115
+ loadout rollback
101
116
  ```
102
117
 
103
- ## Find new and better options every day
118
+ Stable currently selects 30 skill directories from four pinned, SPDX-identified, policy-selected public sources. Selection policy is evidence, not a claim that the sources are safe, trusted, human-reviewed, benchmarked, or the right choice for every user.
104
119
 
105
- Loadout has two separate daily checks:
120
+ ## Profiles
106
121
 
107
- - **Discovery radar** finds new and fast-growing repositories and puts them in a review queue.
108
- - **Update radar** checks installed Loadout packages for a newer reviewed commit, archive status, staleness, file drift, and permission changes.
122
+ | Profile | Scope |
123
+ | ----------- | ---------------------------------------------------------------------- |
124
+ | **Stable** | Bounded default: 30 skills from four policy-selected sources |
125
+ | **Power** | Broader cross-project set from eight checked-in collections |
126
+ | **Maximum** | Valid skill-bearing contents in a managed, disabled-by-default library |
127
+ | **Custom** | Only package IDs explicitly supplied by the user |
109
128
 
110
- Enable both at a local time of your choice:
129
+ Preview choices with `loadout profiles` and `loadout setup --mode <profile>`. Maximum counts are computed from pinned contents after validation and duplicate resolution; MCP-only entries stay on a separate approval path.
111
130
 
112
- ```bash
113
- loadout autopilot --time 09:00 # preview
114
- loadout autopilot --time 09:00 --yes # enable
115
- loadout autopilot --remove --yes # remove
116
- ```
131
+ ## Catalog and discovery
117
132
 
118
- Autopilot uses the native scheduler on macOS, Linux, or Windows. Scheduled jobs are read-only: they can discover and report, but they cannot install, promote, execute, or update anything.
133
+ <!-- loadout:catalog-coverage:start -->
119
134
 
120
- Check the results with:
135
+ The bundled catalog currently contains **50 credited public repositories** across **37 categories**: **31 have skill components** and **19 are MCP-only**. All 50 are technically screened and pinned; 4 sources are selected by the bounded Stable policy. See every linked source, license status, component type, and pinned commit in **[Catalog and upstream credits](./docs/CATALOG.md)**.
121
136
 
122
- ```bash
123
- loadout review-queue
124
- loadout candidate list --limit 20
125
- loadout alerts --updates
126
- loadout update
127
- ```
137
+ <!-- loadout:catalog-coverage:end -->
128
138
 
129
- The wording matters:
139
+ <!-- loadout:evidence-stages:start -->
130
140
 
131
- - A **new lead** is interesting enough to inspect, not “must install.”
132
- - An **available update** is a different reviewed commit, not automatically better.
133
- - A **replacement alert** appears only when category-specific comparison evidence supports it.
141
+ Catalog evidence-stage counts: **0 benchmarked**, **0 discovered**, **0 human-reviewed**, **46 inspected**, **4 policy-selected**. Stage definitions and Stable selection criteria are in the [catalog policy](./docs/CATALOG_POLICY.md).
134
142
 
135
- Loadout will never call a viral repository better just because its star count jumped. That protects users from hype, compromised repositories, and tools that solve a completely different problem.
143
+ <!-- loadout:evidence-stages:end -->
136
144
 
137
- The repository also refreshes a public discovery report every day:
145
+ Loadout does not claim there is one universally “best” configuration. Recommendations are bounded, rule-based proposals; stars and discovery results are signals for review, not quality proof.
138
146
 
139
147
  <!-- loadout:daily-discovery:start -->
140
148
 
141
- **Discovery snapshot (generated 2026-07-17):** [242 repositories observed](./docs/DISCOVERED.md), including 219 uncataloged review candidates and 23 repositories already in the reviewed catalog.
149
+ **Discovery snapshot (generated 2026-07-17):** [242 repositories observed](./docs/DISCOVERED.md), including 219 uncataloged review candidates and 23 repositories already in the inspected catalog.
142
150
  <!-- loadout:daily-discovery:end -->
143
151
 
144
- See **[today's generated discovery report](./docs/DISCOVERED.md)** for direct links, observed star velocity, age, license metadata, and the searches that found each repository. The GitHub README updates when the daily workflow commits new evidence; an already-installed npm package keeps its own versioned documentation until the next npm release.
152
+ The checked-in discovery report proves only its dated snapshot, not the success of every scheduled run. Use `loadout discover --source all --queue`, `loadout review-queue`, and `loadout candidate inspect owner/repository` to inspect candidates before catalog promotion.
145
153
 
146
- Inspect a promising lead without running its code:
154
+ ## Trust and limits
147
155
 
148
- ```bash
149
- loadout discover --source all --queue
150
- loadout review-queue
151
- loadout candidate inspect owner/repository --output ./candidate-dossier.json
152
- ```
156
+ - A pinned commit identifies source bytes; it does not prove safety, correct licensing, usefulness, or future compatibility.
157
+ - Static inspection reports scripts, hooks, binaries, domains, credential references, and unsupported components. It is not a security audit.
158
+ - No bundled source is called benchmarked until isolated real trials, signed evidence, and human approval exist.
159
+ - Project recommendations read bounded local metadata. The documented local flow does not upload project source.
160
+ - Catalog fetches, discovery, update checks, and optional live checks use the network where stated.
161
+ - MCP servers and executable tools have separate preview and approval paths because they can use credentials, start processes, or contact services.
162
+ - Shared manifests hold environment-variable or OS-keychain references, not secret values.
153
163
 
154
- The dossier records what the repository contains, its exact commit, its license signal, possible overlaps, and static findings. Promotion into the catalog still requires review.
164
+ <!-- loadout:current-limits:start -->
155
165
 
156
- ## Chat subscriptions and API keys
166
+ - **6 catalog records** currently have `NOASSERTION` license status and need upstream-license review before a public release decision.
157
167
 
158
- A ChatGPT Plus/Pro or Claude Pro/Max subscription is not the same as separately billed API access. You do **not** need an OpenAI, Anthropic, or OpenRouter API key for Stable, Power, Maximum, discovery, project recommendations, updates, or rollback.
168
+ <!-- loadout:current-limits:end -->
159
169
 
160
- Tell non-interactive setup what separately billed API access is available without passing a secret:
170
+ Read the [security policy](./SECURITY.md), [catalog policy](./docs/CATALOG_POLICY.md), and [credential and update policy](./docs/CREDENTIAL_AND_UPDATE_POLICY.md) before trusting third-party content.
161
171
 
162
- ```bash
163
- loadout setup --mode stable --api-access none
164
- loadout setup --mode maximum --api-access openai,anthropic
165
- ```
172
+ ## Agent support
166
173
 
167
- Loadout never treats API access as permission to install an MCP server. Credentialed MCP tools remain explicit setup steps, and configuration stores an environment-variable or OS-keychain reference rather than the secret value.
174
+ <!-- loadout:support-summary:start -->
168
175
 
169
- ```bash
170
- export LOADOUT_GITHUB_TOKEN="$GITHUB_PERSONAL_ACCESS_TOKEN"
176
+ Loadout's adapter capability matrix currently covers **12 agents**: Claude Code, Cline, Codex, Cursor, Gemini CLI, GitHub Copilot, Hermes, Junie, Kiro CLI, OpenCode, Roo Code, Windsurf. See the [complete feature matrix](./docs/FEATURE_TEST_MATRIX.md) for configured paths, filesystem lifecycle, platform, and native-host evidence.
171
177
 
172
- loadout mcp-recipe github-readonly --config ./mcp.json \
173
- --credential GITHUB_PERSONAL_ACCESS_TOKEN=env:LOADOUT_GITHUB_TOKEN
178
+ `tests/adapter-conformance.test.ts` plans, applies, inspects, disables, re-enables, and rolls back one skill for every configured target when the suite runs. A configured target path does not prove that the native application recognizes or executes it. Native application execution is not inferred from filesystem simulation.
174
179
 
175
- loadout mcp-recipe github-readonly --config ./mcp.json \
176
- --credential GITHUB_PERSONAL_ACCESS_TOKEN=env:LOADOUT_GITHUB_TOKEN \
177
- --yes
178
- ```
180
+ Configured platform evidence: Linux (CI configured), macOS (CI configured), Windows (CI configured).
179
181
 
180
- ## Graphify and other executable tools
182
+ Platform evidence source: `.github/workflows/ci.yml (cross-platform job)`.
181
183
 
182
- Graphify is included as a separate reviewed tool recipe, not disguised as a portable skill. Its setup uses a pinned version and artifact hash, an isolated runtime, an exact preview, and rollback.
184
+ Configured CI platforms describe a manually triggered workflow, not evidence that a current run passed.
183
185
 
184
- ```bash
185
- loadout tool
186
- loadout tool graphify --agents codex
187
- loadout tool graphify --agents codex --yes --approve-risk
188
- loadout tool graphify --remove
189
- ```
186
+ <!-- loadout:support-summary:end -->
187
+
188
+ Configured paths and disposable filesystem lifecycle tests do not prove that native applications recognize or execute installed skills. Use `loadout capabilities --inspect` for the local component matrix.
190
189
 
191
- Executable tools and MCP servers receive separate treatment because they can run processes, use credentials, or open network connections. Broad setup never runs third-party repository installers.
192
-
193
- ## Useful commands
194
-
195
- | Goal | Command |
196
- | ----------------------------------------- | --------------------------------------------- |
197
- | See the guided upgrade | `loadout upgrade` |
198
- | Install a loadout | `loadout setup --mode stable\|power\|maximum` |
199
- | See detected agents and installed skills | `loadout status` |
200
- | Inspect health and evidence | `loadout health --explain` |
201
- | Browse the reviewed catalog | `loadout catalog` |
202
- | Search by capability | `loadout search <words>` |
203
- | Recommend for a project | `loadout recommend --project .` |
204
- | Activate relevant library skills | `loadout optimize --project .` |
205
- | Find new repositories | `loadout discover --source all --queue` |
206
- | Read the discovery queue | `loadout review-queue` |
207
- | Check installed changes | `loadout alerts --updates` |
208
- | Preview updates | `loadout update` |
209
- | Undo the latest applied change | `loadout rollback` |
210
- | Test safely without touching your profile | `loadout demo` |
211
- | See every command | `loadout --help` |
212
-
213
- Shell completion is available for Bash, Zsh, Fish, and PowerShell:
190
+ ## Command reference
191
+
192
+ | Job | Command |
193
+ | ---------------------------------- | ------------------------------------------- |
194
+ | Guided read-only path | `loadout guide` |
195
+ | Preview or apply a profile | `loadout setup --mode stable [--yes]` |
196
+ | List and inspect managed state | `loadout list`; `loadout health --explain` |
197
+ | Browse or search | `loadout catalog`; `loadout search <words>` |
198
+ | Recommend for a project | `loadout recommend --project .` |
199
+ | Preview or apply updates | `loadout update [--yes]` |
200
+ | Undo the latest supported mutation | `loadout rollback` |
201
+ | Remove one managed package | `loadout remove <package>` |
202
+ | Preview complete removal | `loadout uninstall` |
203
+ | Test with temporary state | `loadout demo` |
204
+ | Discover the full surface | `loadout --help`; `loadout advanced` |
205
+
206
+ ## Development
214
207
 
215
208
  ```bash
216
- loadout completion zsh > ~/.zfunc/_loadout
209
+ npm ci
210
+ npm run verify
211
+ npm run verify:full
217
212
  ```
218
213
 
219
- ## What Loadout changes
214
+ <!-- loadout:verification-summary:start -->
220
215
 
221
- Before any managed write, Loadout:
216
+ `verify` invokes `format:check`, `lint`, `typecheck`, `check:evidence`, `test`, `test:e2e:cli`, `test:e2e:readme`, `test:package`, `test:performance` in that order. Use `npm run verify:full` to include the optional Playwright dashboard check.
222
217
 
223
- 1. fetches the exact reviewed Git commit;
224
- 2. inspects the selected contents;
225
- 3. resolves duplicate target names;
226
- 4. prints safety findings and every destination;
227
- 5. waits for explicit approval;
228
- 6. snapshots the old state;
229
- 7. applies the change as one transaction;
230
- 8. records hashes for later drift checks and rollback.
218
+ <!-- loadout:verification-summary:end -->
231
219
 
232
- Loadout state lives under `~/.loadout` by default. It never executes arbitrary third-party install scripts during broad setup. Maximum stores additional skills in a disabled library, and invalid individual skills are quarantined without discarding their safe siblings.
220
+ The repository's mixed README product-flow test uses an isolated build, disposable state, an offline fixture, direct core calls, and CLI subprocesses. It does not prove live-network availability or behavior inside native agent applications. The [testing guide](./docs/TESTING.md) documents the exact checks and their boundaries.
233
221
 
234
- ## Test the product
222
+ ## Documentation
235
223
 
236
- Run a real install-and-rollback flow in a temporary Codex profile:
224
+ - [Catalog and upstream credits](./docs/CATALOG.md)
225
+ - [Catalog evidence policy](./docs/CATALOG_POLICY.md)
226
+ - [Feature and evidence matrix](./docs/FEATURE_TEST_MATRIX.md)
227
+ - [Testing contract](./docs/TESTING.md)
228
+ - [User test and troubleshooting guide](./docs/USER_TEST_GUIDE.md)
229
+ - [Daily discovery snapshot](./docs/DISCOVERED.md)
230
+ - [Candidate inspection and promotion](./docs/CANDIDATE_INTELLIGENCE.md)
231
+ - [Credential and update policy](./docs/CREDENTIAL_AND_UPDATE_POLICY.md)
232
+ - [Repository stabilization record](./docs/REPOSITORY_STABILIZATION.md)
233
+ - [Engineering plan](./MASTER_PLAN.md) and [changelog](./CHANGELOG.md)
237
234
 
238
- ```bash
239
- loadout demo
240
- ```
235
+ ## Contributing, security, and attribution
241
236
 
242
- For contributors:
237
+ Keep changes scoped, add regression coverage for behavior changes, and run `npm run verify:full`. Report vulnerabilities through [SECURITY.md](./SECURITY.md), without credentials, private source, or unredacted state. General bugs and proposals belong in the [issue tracker](https://github.com/VirajMishra1/loadout/issues).
243
238
 
244
- ```bash
245
- npm ci
246
- npm run verify
247
- ```
248
-
249
- `verify` checks formatting, lint, types, catalog evidence, unit and integration tests, a real CLI product flow, an installed-package smoke test, and a 1,000-skill performance gate.
250
-
251
- Use the **[product testing guide](./docs/TESTING.md)** for Power, Maximum, project optimization, credentials, and rollback. Use the **[complete feature matrix](./docs/FEATURE_TEST_MATRIX.md)** when you want to exercise every CLI feature and understand which commands read files, use the network, start processes, or write state.
252
-
253
- No bundled source is called benchmarked until real isolated trials, signed evidence, and human approval exist.
254
-
255
- ## Current beta limits
256
-
257
- - Daily discovery creates leads; it does not automatically make them trusted catalog entries.
258
- - Replacement alerts need real comparison evidence. Loadout does not invent a winner from stars or recency.
259
- - MCP-only records need explicit configuration and may need external credentials or software.
260
- - Graphify is the first fully reviewed executable recipe; other runtime tools need equivalent recipe work.
261
- - Six catalog records currently have `NOASSERTION` license metadata and should be reviewed before relying on their license status.
262
- - The local registry works for development and self-hosting; there is no hosted Loadout registry service yet.
263
- - The optional dashboard exists for diagnostics, but the complete product is CLI-first.
264
-
265
- ## More detail
266
-
267
- <details>
268
- <summary><strong>All 50 upstream projects credited by Loadout</strong></summary>
269
-
270
- - [Superpowers](https://github.com/obra/superpowers)
271
- - [Context7](https://github.com/upstash/context7)
272
- - [Playwright MCP](https://github.com/microsoft/playwright-mcp)
273
- - [UI UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill)
274
- - [GitHub MCP Server](https://github.com/github/github-mcp-server)
275
- - [OpenAI Skills Catalog](https://github.com/openai/skills)
276
- - [Anthropic Skills](https://github.com/anthropics/skills)
277
- - [Agent Skills Marketplace](https://github.com/wshobson/agents)
278
- - [Vercel Agent Skills](https://github.com/vercel-labs/agent-skills)
279
- - [Vercel Skills](https://github.com/vercel-labs/skills)
280
- - [Cloudflare MCP Server](https://github.com/cloudflare/mcp-server-cloudflare)
281
- - [Supabase MCP](https://github.com/supabase/mcp)
282
- - [Sentry MCP](https://github.com/getsentry/sentry-mcp)
283
- - [Exa MCP Server](https://github.com/exa-labs/exa-mcp-server)
284
- - [Firecrawl MCP Server](https://github.com/firecrawl/firecrawl-mcp-server)
285
- - [Azure DevOps MCP](https://github.com/microsoft/azure-devops-mcp)
286
- - [Docker MCP Gateway](https://github.com/docker/mcp-gateway)
287
- - [Hugging Face MCP Server](https://github.com/huggingface/hf-mcp-server)
288
- - [Awesome Copilot](https://github.com/github/awesome-copilot)
289
- - [OpenAI Codex Skills](https://github.com/openai/codex)
290
- - [Ponytail](https://github.com/DietrichGebert/ponytail)
291
- - [Addy Osmani Agent Skills](https://github.com/addyosmani/agent-skills)
292
- - [Scientific Agent Skills](https://github.com/K-Dense-AI/scientific-agent-skills)
293
- - [Planning with Files](https://github.com/OthmanAdi/planning-with-files)
294
- - [PM Skills](https://github.com/phuryn/pm-skills)
295
- - [Baoyu Skills](https://github.com/JimLiu/baoyu-skills)
296
- - [Trail of Bits Skills](https://github.com/trailofbits/skills)
297
- - [Antfu Skills](https://github.com/antfu/skills)
298
- - [.NET Skills](https://github.com/dotnet/skills)
299
- - [Microsoft Skills](https://github.com/microsoft/skills)
300
- - [Web Quality Skills](https://github.com/addyosmani/web-quality-skills)
301
- - [Softaworks Agent Toolkit](https://github.com/softaworks/agent-toolkit)
302
- - [Draw.io Skill](https://github.com/Agents365-ai/drawio-skill)
303
- - [Chrome DevTools MCP](https://github.com/ChromeDevTools/chrome-devtools-mcp)
304
- - [Serena](https://github.com/oraios/serena)
305
- - [Model Context Protocol Servers](https://github.com/modelcontextprotocol/servers)
306
- - [AWS MCP Servers](https://github.com/awslabs/mcp)
307
- - [DBHub](https://github.com/bytebase/dbhub)
308
- - [FastAPI MCP](https://github.com/tadata-org/fastapi_mcp)
309
- - [Browser MCP](https://github.com/BrowserMCP/mcp)
310
- - [AntV Chart MCP](https://github.com/antvis/mcp-server-chart)
311
- - [Excel MCP Server](https://github.com/haris-musa/excel-mcp-server)
312
- - [arXiv MCP Server](https://github.com/blazickjp/arxiv-mcp-server)
313
- - [Google Workspace MCP](https://github.com/taylorwilsdon/google_workspace_mcp)
314
- - [MongoDB MCP Server](https://github.com/mongodb-js/mongodb-mcp-server)
315
- - [Redis MCP Server](https://github.com/redis/mcp-redis)
316
- - [Stripe AI](https://github.com/stripe/ai)
317
- - [MCP Toolbox for Databases](https://github.com/googleapis/mcp-toolbox)
318
- - [Browserbase MCP Server](https://github.com/browserbase/mcp-server-browserbase)
319
- - [Bright Data MCP](https://github.com/brightdata/brightdata-mcp)
320
-
321
- Thank you to every maintainer and contributor. Inclusion is attribution and discovery metadata, not ownership, endorsement, or relicensing.
322
-
323
- </details>
324
-
325
- - [Catalog and all upstream credits](./docs/CATALOG.md)
326
- - [Daily generated discovery report](./docs/DISCOVERED.md)
327
- - [How candidates are inspected and promoted](./docs/CANDIDATE_INTELLIGENCE.md)
328
- - [Catalog ranking and conflict policy](./docs/CATALOG_POLICY.md)
329
- - [Security policy](./SECURITY.md)
330
- - [Testing guide](./docs/TESTING.md)
331
- - [Complete CLI feature test matrix](./docs/FEATURE_TEST_MATRIX.md)
332
- - [Engineering master plan](./MASTER_PLAN.md)
239
+ The catalog contains 50 credited public repositories. Inclusion records discovery and attribution; it does not transfer ownership, imply endorsement, or relicense upstream work.
333
240
 
334
241
  ## License
335
242
 
336
- Loadout is licensed under the [MIT License](./LICENSE). Catalog entries keep their own upstream licenses and terms; Loadout links and credits them but does not relicense them.
337
-
338
- Built for the OpenAI Build Week **Developer Tools** category.
243
+ Loadout is licensed under the [MIT License](./LICENSE). Catalog entries retain their upstream licenses and terms.
package/dashboard/app.js CHANGED
@@ -331,7 +331,7 @@ function renderHealth(data) {
331
331
  setMarkupState(
332
332
  health,
333
333
  `health-list ${state}`,
334
- `<div class="metric-row"><strong>${Number(report.installedPackages) || 0}</strong><span>packages</span><strong>${report.updatesChecked ? Number(report.updatesAvailable) || 0 : "—"}</strong><span>${report.updatesChecked ? "updates" : "updates not checked"}</span><strong>${Number(report.driftedFiles) || 0}</strong><span>drifted files</span><strong>${Number(report.driftedMcpServers) || 0}</strong><span>drifted MCP</span></div>${findings.map((finding) => `<p><span class="finding-level">${escapeHtml(finding.level || "info")}</span>${escapeHtml(finding.message || "")}</p>`).join("")}`,
334
+ `<p><strong>Evidence coverage and managed-state hygiene</strong></p><div class="metric-row"><strong>${Number(report.installedPackages) || 0}</strong><span>packages</span><strong>${report.updatesChecked ? Number(report.updatesAvailable) || 0 : "—"}</strong><span>${report.updatesChecked ? "updates" : "updates not checked"}</span><strong>${Number(report.driftedFiles) || 0}</strong><span>drifted files</span><strong>${Number(report.driftedMcpServers) || 0}</strong><span>drifted MCP</span></div>${findings.map((finding) => `<p><span class="finding-level">${escapeHtml(finding.level || "info")}</span>${escapeHtml(finding.message || "")}</p>`).join("")}`,
335
335
  );
336
336
  }
337
337
 
@@ -363,12 +363,12 @@ function renderRecommendations(data) {
363
363
  setMarkupState(
364
364
  recommendations,
365
365
  "grid",
366
- items
366
+ `<p><strong>Rule-based project suggestions</strong>: detected project signals select catalog entries; this is not empirical quality evidence.</p>${items
367
367
  .map((item, index) => {
368
368
  const headingId = `recommendation-${index}`;
369
369
  return `<article aria-labelledby="${headingId}"><div class="card-heading"><h3 id="${headingId}">${escapeHtml(item.packageId || "Unknown package")}</h3><span class="badge">${escapeHtml(item.confidence || "unknown")}</span></div><p>${escapeHtml(item.reason || "No recommendation reason available.")}</p></article>`;
370
370
  })
371
- .join(""),
371
+ .join("")}`,
372
372
  );
373
373
  }
374
374
 
@@ -378,7 +378,7 @@ function renderProfiles(data) {
378
378
  ? Object.entries(data.profiles)
379
379
  : [];
380
380
  if (!entries.length)
381
- return setTextState(profiles, "No tested profiles are available.");
381
+ return setTextState(profiles, "No Loadout policy profiles are available.");
382
382
  setMarkupState(
383
383
  profiles,
384
384
  "grid",
@@ -13,8 +13,8 @@
13
13
  <p class="eyebrow">LOADOUT</p>
14
14
  <h1 id="page-title">Your agent control center.</h1>
15
15
  <p class="subhead">
16
- Health, safe updates, tested setups, and real packages from this
17
- machine.
16
+ Evidence health, safe updates, policy setups, and real packages from
17
+ this machine.
18
18
  </p>
19
19
  <nav class="dashboard-nav" aria-label="Dashboard views">
20
20
  <a href="#home" data-route="home">Home</a>
@@ -125,7 +125,7 @@
125
125
 
126
126
  <section data-screen="home" aria-labelledby="recommendations-heading">
127
127
  <div class="section-title">
128
- <h2 id="recommendations-heading">Recommended for this project</h2>
128
+ <h2 id="recommendations-heading">Rule-based project suggestions</h2>
129
129
  <span id="project-signals"></span>
130
130
  </div>
131
131
  <div
@@ -141,7 +141,7 @@
141
141
 
142
142
  <section data-screen="home" aria-labelledby="profiles-heading">
143
143
  <div class="section-title">
144
- <h2 id="profiles-heading">Tested profiles</h2>
144
+ <h2 id="profiles-heading">Loadout policy profiles</h2>
145
145
  <span>Preview only</span>
146
146
  </div>
147
147
  <div