loadout-ai 0.1.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.
- package/LICENSE +21 -0
- package/MASTER_PLAN.md +1711 -0
- package/README.md +453 -0
- package/SECURITY.md +18 -0
- package/SIMPLE_PLAN.md +44 -0
- package/catalog/discovered.json +10469 -0
- package/catalog/packages.json +1150 -0
- package/dashboard/app.js +607 -0
- package/dashboard/index.html +249 -0
- package/dashboard/styles.css +384 -0
- package/dist/src/cli.js +2735 -0
- package/dist/src/core/active-policy.js +233 -0
- package/dist/src/core/active-set.js +382 -0
- package/dist/src/core/adapters.js +254 -0
- package/dist/src/core/adopt.js +92 -0
- package/dist/src/core/agent-health-score.js +475 -0
- package/dist/src/core/agent-inspection.js +152 -0
- package/dist/src/core/agent-versions.js +131 -0
- package/dist/src/core/api.js +90 -0
- package/dist/src/core/atomic-file.js +22 -0
- package/dist/src/core/audit.js +174 -0
- package/dist/src/core/benchmark-campaign.js +496 -0
- package/dist/src/core/benchmark-evidence.js +458 -0
- package/dist/src/core/benchmark-fixtures.js +1157 -0
- package/dist/src/core/benchmark-runner.js +301 -0
- package/dist/src/core/benchmark-trust.js +795 -0
- package/dist/src/core/canary.js +77 -0
- package/dist/src/core/candidate-intelligence.js +661 -0
- package/dist/src/core/catalog-coverage.js +85 -0
- package/dist/src/core/catalog-install.js +186 -0
- package/dist/src/core/catalog-release.js +286 -0
- package/dist/src/core/catalog.js +327 -0
- package/dist/src/core/codex-mcp.js +122 -0
- package/dist/src/core/community.js +86 -0
- package/dist/src/core/compatibility-intelligence.js +465 -0
- package/dist/src/core/completion.js +160 -0
- package/dist/src/core/components.js +138 -0
- package/dist/src/core/conversion.js +56 -0
- package/dist/src/core/credentials.js +377 -0
- package/dist/src/core/demo.js +136 -0
- package/dist/src/core/diff.js +83 -0
- package/dist/src/core/discovery-connector.js +165 -0
- package/dist/src/core/doctor.js +95 -0
- package/dist/src/core/ecosystem-import.js +1072 -0
- package/dist/src/core/evaluate.js +72 -0
- package/dist/src/core/file-lock.js +140 -0
- package/dist/src/core/freshness-alerts.js +230 -0
- package/dist/src/core/github-discovery.js +97 -0
- package/dist/src/core/github.js +148 -0
- package/dist/src/core/head-to-head.js +437 -0
- package/dist/src/core/health-score-evidence.js +169 -0
- package/dist/src/core/health.js +129 -0
- package/dist/src/core/improve.js +223 -0
- package/dist/src/core/install.js +233 -0
- package/dist/src/core/intelligence-feed-build.js +59 -0
- package/dist/src/core/intelligence-feed.js +353 -0
- package/dist/src/core/loadout-badge.js +55 -0
- package/dist/src/core/loadout-card.js +87 -0
- package/dist/src/core/manifest.js +307 -0
- package/dist/src/core/mcp-recipes.js +419 -0
- package/dist/src/core/mcp-registry-discovery.js +455 -0
- package/dist/src/core/mcp.js +287 -0
- package/dist/src/core/model-config.js +102 -0
- package/dist/src/core/observations.js +87 -0
- package/dist/src/core/outcomes.js +164 -0
- package/dist/src/core/package.js +225 -0
- package/dist/src/core/paths.js +214 -0
- package/dist/src/core/portable.js +130 -0
- package/dist/src/core/private-discovery.js +45 -0
- package/dist/src/core/profiles.js +255 -0
- package/dist/src/core/provenance.js +278 -0
- package/dist/src/core/ranking.js +104 -0
- package/dist/src/core/recommend.js +181 -0
- package/dist/src/core/registry-api.js +97 -0
- package/dist/src/core/registry.js +316 -0
- package/dist/src/core/release-claims.js +175 -0
- package/dist/src/core/remove.js +122 -0
- package/dist/src/core/review-queue.js +200 -0
- package/dist/src/core/runtime-tool-recipe.js +315 -0
- package/dist/src/core/runtime-tools.js +453 -0
- package/dist/src/core/safety.js +234 -0
- package/dist/src/core/sandbox.js +78 -0
- package/dist/src/core/scheduler.js +264 -0
- package/dist/src/core/share-report.js +85 -0
- package/dist/src/core/signing.js +115 -0
- package/dist/src/core/skill-compare.js +239 -0
- package/dist/src/core/skill-inventory.js +193 -0
- package/dist/src/core/skill-security.js +340 -0
- package/dist/src/core/skills-sh-discovery.js +336 -0
- package/dist/src/core/skills.js +208 -0
- package/dist/src/core/snapshot.js +210 -0
- package/dist/src/core/source.js +305 -0
- package/dist/src/core/state.js +300 -0
- package/dist/src/core/sync.js +348 -0
- package/dist/src/core/terminal.js +53 -0
- package/dist/src/core/transaction.js +211 -0
- package/dist/src/core/update-watch.js +39 -0
- package/dist/src/core/update.js +216 -0
- package/dist/src/core/upgrade.js +207 -0
- package/dist/src/dashboard.js +418 -0
- package/dist/src/shared/schemas.js +336 -0
- package/dist/src/shared/types.js +1 -0
- package/docs/ACTIVE_SET.md +53 -0
- package/docs/ACTIVE_SET_POLICY.md +45 -0
- package/docs/CANDIDATE_INTELLIGENCE.md +139 -0
- package/docs/CATALOG.md +78 -0
- package/docs/CATALOG_POLICY.md +41 -0
- package/docs/COMMUNITY_DISCOVERY.md +14 -0
- package/docs/COMPATIBILITY_POLICY.md +22 -0
- package/docs/CONVERSION_AND_SANDBOX.md +27 -0
- package/docs/CREDENTIAL_AND_UPDATE_POLICY.md +31 -0
- package/docs/DISCOVERED.md +280 -0
- package/docs/EVALUATION_PROTOCOL.md +40 -0
- package/docs/EVALUATION_PROTOCOL_V1.md +300 -0
- package/docs/FEATURE_TEST_MATRIX.md +802 -0
- package/docs/GITHUB_AUTHORIZATION.md +38 -0
- package/docs/HEAD_TO_HEAD_EVALUATION.md +79 -0
- package/docs/PROVENANCE_AND_COMPARISON.md +72 -0
- package/docs/PROVIDER_CONFIGURATION.md +45 -0
- package/docs/RELEASE_REVIEW.md +117 -0
- package/docs/SAFE_UPDATE_DEMO.md +25 -0
- package/docs/SCHEMA_DECISIONS.md +25 -0
- package/docs/TEAM_POLICY.md +18 -0
- package/docs/TESTING.md +190 -0
- package/package.json +82 -0
package/README.md
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
# Loadout
|
|
2
|
+
|
|
3
|
+
**One safe CLI to discover, compare, install, update, and roll back capabilities across AI coding agents.**
|
|
4
|
+
|
|
5
|
+
Loadout turns the fragmented world of Agent Skills, MCP servers, plugins, and agent-specific directories into one screened workflow. It detects the agents on your computer, inventories what you already have, prepares capabilities from immutable Git commits, explains conflicts before writing, and snapshots every managed change.
|
|
6
|
+
|
|
7
|
+
It supports Codex, Claude Code, Cursor, Gemini CLI, OpenCode, Hermes, Windsurf, Cline, GitHub Copilot, Roo Code, Kiro CLI, and Junie on macOS, Linux, and Windows.
|
|
8
|
+
|
|
9
|
+
> Loadout is in open-source beta and **has not been published to npm yet**. Use `npx .` from a clone today. The intended post-publication command is `npx loadout-ai`; the installed executable will be `loadout`.
|
|
10
|
+
|
|
11
|
+
## Why Loadout exists
|
|
12
|
+
|
|
13
|
+
Useful agent extensions appear across dozens of repositories, social feeds, and incompatible marketplaces. A star count alone cannot tell you whether two collections overlap, whether a repository still works, what it will write, or how to undo the installation.
|
|
14
|
+
|
|
15
|
+
Loadout gives you:
|
|
16
|
+
|
|
17
|
+
- one inventory across supported agents;
|
|
18
|
+
- a 50-repository technically screened catalog pinned to exact commits;
|
|
19
|
+
- Stable, Power, Maximum, and Custom selection modes;
|
|
20
|
+
- project-aware activation instead of exposing an enormous library to every prompt;
|
|
21
|
+
- evidence-based comparison and replacement alerts;
|
|
22
|
+
- daily read-only discovery and update checks;
|
|
23
|
+
- explicit MCP configuration with native credential-store references;
|
|
24
|
+
- transactional installs, integrity checks, snapshots, and rollback;
|
|
25
|
+
- no execution of third-party repository install or lifecycle scripts.
|
|
26
|
+
|
|
27
|
+
Loadout does not claim there is one universally “best” configuration. It makes the evidence, trade-offs, and exact filesystem plan visible so the user can decide.
|
|
28
|
+
|
|
29
|
+
## Run it locally
|
|
30
|
+
|
|
31
|
+
Requirements: Git and Node.js 20 or newer.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
git clone https://github.com/VirajMishra1/loadout.git
|
|
35
|
+
cd loadout
|
|
36
|
+
npm ci
|
|
37
|
+
npm run build
|
|
38
|
+
npx . --help
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Start with the unified read-only preview:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx . upgrade
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`upgrade` detects installed agents, inventories health, scores only evidence it can prove, scans the current project, recommends reviewed sources, fetches exact pinned commits, and prints every target and risk finding. Nothing changes until `--yes` is supplied.
|
|
48
|
+
|
|
49
|
+
## The core journey
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 1. Preview the strongest low-risk Stable journey. Read-only.
|
|
53
|
+
npx . upgrade --mode stable --project .
|
|
54
|
+
|
|
55
|
+
# 2. Apply exactly the displayed transaction.
|
|
56
|
+
npx . upgrade --mode stable --project . --yes
|
|
57
|
+
|
|
58
|
+
# 3. Inspect and optimize the active set for this project.
|
|
59
|
+
npx . library
|
|
60
|
+
npx . optimize --project .
|
|
61
|
+
npx . optimize --project . --yes
|
|
62
|
+
|
|
63
|
+
# 4. Explain health evidence, share a private aggregate card, or undo.
|
|
64
|
+
npx . health --explain
|
|
65
|
+
npx . card
|
|
66
|
+
npx . rollback
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`setup`, `scan`, `recommend`, and the other constituent commands remain available for advanced use. `upgrade --json` provides the same deterministic preview for automation.
|
|
70
|
+
|
|
71
|
+
`--approve-risk` acknowledges findings that were already printed during preview; it does not disable safety validation. The applied operation is transactional and produces a snapshot identifier.
|
|
72
|
+
|
|
73
|
+
For a real install-and-rollback exercise that cannot touch your profile:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx . demo
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The demo creates a temporary virtual Codex profile, fetches the pinned public Superpowers source, installs discovered skills, verifies managed state, rolls back, and deletes the temporary directory.
|
|
80
|
+
|
|
81
|
+
## Choose a loadout
|
|
82
|
+
|
|
83
|
+
| Mode | Intended use | What it selects | Installation behavior |
|
|
84
|
+
| ----------- | ----------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
85
|
+
| **Stable** | Recommended daily driver | 30 selected skills from four pinned, SPDX-identified sources | Installs the selected skills into detected agents with no extra static-risk approval |
|
|
86
|
+
| **Power** | Broad daily driver | A maintained skill-level allowlist from eight cross-project collections | Installs only the selected skills, not every skill in each collection |
|
|
87
|
+
| **Maximum** | Exploration and maximum optionality | Every non-archived technically screened catalog record | Stores all discovered skill components in Loadout's disabled library; MCP-only records remain explicit setup steps |
|
|
88
|
+
| **Custom** | Precise control | Only package IDs supplied by the user | Uses the same preview, safety, conflict, and transaction pipeline |
|
|
89
|
+
|
|
90
|
+
Maximum is a library, not an instruction to activate everything. Use `optimize`, `activate`, `enable`, and `disable` to keep each agent's active set bounded and relevant to the current project. Loadout warns when an active set exceeds 30 skills per agent.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npx . setup --mode maximum
|
|
94
|
+
npx . setup --mode maximum --yes --approve-risk
|
|
95
|
+
npx . optimize --project . --limit 30
|
|
96
|
+
npx . optimize --project . --limit 30 --yes
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Install a reviewed runtime tool: Graphify
|
|
100
|
+
|
|
101
|
+
Graphify is not one of Stable's 30 portable skills. It is an executable codebase-intelligence tool, so Loadout gives it a separate, explicit recipe instead of silently running its repository installer. The recipe pins Graphify 0.9.17 to its reviewed Git commit and exact PyPI wheel SHA-256, isolates its Python runtime under Loadout state, strips provider credentials from installer subprocesses, snapshots every target, verifies the installed version, pins the generated runtime lookup, and supports removal.
|
|
102
|
+
|
|
103
|
+
Install [`uv`](https://docs.astral.sh/uv/getting-started/installation/) first, then preview before applying:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# See every reviewed executable recipe.
|
|
107
|
+
npx . tool
|
|
108
|
+
|
|
109
|
+
# Preview the exact artifact, commands, permissions, and Codex target.
|
|
110
|
+
npx . tool graphify --agents codex
|
|
111
|
+
|
|
112
|
+
# Apply only after reviewing the preview.
|
|
113
|
+
npx . tool graphify --agents codex --yes --approve-risk
|
|
114
|
+
|
|
115
|
+
# Preview and then remove it, restoring the pre-install snapshot.
|
|
116
|
+
npx . tool graphify --remove
|
|
117
|
+
npx . tool graphify --remove --yes --approve-risk
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The same recipe has reviewed registration targets for Claude Code, Cursor, Gemini CLI, OpenCode, Hermes, GitHub Copilot, and Kiro CLI. Pass a comma-separated list such as `--agents codex,claude-code`; Loadout refuses requested agents it cannot detect.
|
|
121
|
+
|
|
122
|
+
## What Loadout manages
|
|
123
|
+
|
|
124
|
+
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; four sources currently satisfy the stricter Stable recommendation policy. See every linked source, license status, component type, and pinned commit in **[Catalog and upstream credits](./docs/CATALOG.md)**.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
npx . catalog
|
|
128
|
+
npx . catalog --coverage
|
|
129
|
+
npx . catalog --history superpowers
|
|
130
|
+
npx . search playwright
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Catalog admission is evidence-based. Every bundled record has an exact GitHub commit and repository-relative component evidence. Loadout reports separate trust stages—`discovered`, `inspected`, `human-reviewed`, `benchmarked`, and `recommended`—instead of calling every pinned record “best.” Stars are one bounded ranking input, not an installation threshold or a substitute for source review. Missing evidence receives no score, archived projects are not auto-selected, and unrelated categories are never presented as head-to-head alternatives.
|
|
134
|
+
|
|
135
|
+
`NOASSERTION` in the catalog means GitHub did not report an SPDX license identifier. It is a review flag—not a license grant and not an accusation. Upstream repositories and their current terms remain authoritative.
|
|
136
|
+
|
|
137
|
+
## Find what is new
|
|
138
|
+
|
|
139
|
+
Discovery is deliberately separate from installation. It gathers leads and explains their evidence, but a newly popular repository cannot silently enter the trusted catalog or modify an agent.
|
|
140
|
+
|
|
141
|
+
**[Today's generated discovery report](./docs/DISCOVERED.md)** lists the latest candidates with direct repository links and supporting signals. Automation refreshes that page and its machine-readable companion at `catalog/discovered.json`; the signed 50-repository release catalog remains separate.
|
|
142
|
+
|
|
143
|
+
<!-- loadout:daily-discovery:start -->
|
|
144
|
+
|
|
145
|
+
**Discovery snapshot (generated 2026-07-16):** [242 repositories observed](./docs/DISCOVERED.md), including 219 uncataloged review candidates and 23 repositories already in the reviewed catalog.
|
|
146
|
+
<!-- loadout:daily-discovery:end -->
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# GitHub defaults to a rolling 180-day discovery window.
|
|
150
|
+
npx . discover --source github
|
|
151
|
+
|
|
152
|
+
# Public Hacker News API: current stories that link to GitHub.
|
|
153
|
+
npx . discover --source hacker-news --min-score 20
|
|
154
|
+
npx . discover --source hacker-news --query codex,mcp,agent
|
|
155
|
+
|
|
156
|
+
# skills.sh install telemetry (requires its request-scoped VERCEL_OIDC_TOKEN,
|
|
157
|
+
# or uses the last complete local cache).
|
|
158
|
+
npx . discover --source skills-sh --limit 50
|
|
159
|
+
|
|
160
|
+
# Official MCP Registry identity and distribution metadata.
|
|
161
|
+
npx . discover --source mcp-registry --limit 50
|
|
162
|
+
|
|
163
|
+
# Query all four sources independently and retain partial results.
|
|
164
|
+
npx . discover --source all --queue --json
|
|
165
|
+
|
|
166
|
+
# Inspect the deduplicated review queue.
|
|
167
|
+
npx . review-queue
|
|
168
|
+
|
|
169
|
+
# Triage today's generated feed with disclosed evidence.
|
|
170
|
+
npx . candidate list --limit 20
|
|
171
|
+
|
|
172
|
+
# Clone one lead, pin its commit, and statically inspect its real contents.
|
|
173
|
+
npx . candidate inspect owner/repository --output ./candidate-dossier.json
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Install both daily read-only jobs with one command:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npx . autopilot --time 09:00 # preview both jobs
|
|
180
|
+
npx . autopilot --time 09:00 --yes # install both native schedules
|
|
181
|
+
npx . autopilot --remove --yes # remove both schedules
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Autopilot installs native schedules on macOS, Linux, and Windows using the pinned npm launcher for this Loadout version. It refreshes the local discovery/review queue and checks pinned package updates every day. It never installs a candidate, promotes a catalog record, or applies an update without a later explicit command and approval. Catalog membership changes only through a verified signed release.
|
|
185
|
+
|
|
186
|
+
Candidates stay in the review queue until a human decision. Shortlisting is not promotion, and promotion is not installation. Discovery state records observations over time so momentum can be measured without manufacturing a signal from a single snapshot.
|
|
187
|
+
|
|
188
|
+
`candidate inspect` is the missing bridge between “this repository is moving” and “this belongs in the catalog.” It creates a path-portable dossier containing the immutable Git commit, installability (`portable-components`, `explicit-runtime-setup`, or `unsupported-source-shape`), discovered skills/rules/commands/agents/plugins/MCP declarations, static safety findings, license status, and possible overlap with catalog packages. Runtime tools such as Graphify are not mislabeled as portable skill bundles. Inspection never runs repository scripts, hooks, MCP servers, lifecycle commands, or models.
|
|
189
|
+
|
|
190
|
+
After a human reviews that dossier, Loadout can create a catalog-record proposal without editing the catalog:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npx . candidate propose ./candidate-dossier.json \
|
|
194
|
+
--id reviewed-id --category workflow \
|
|
195
|
+
--platforms windows,macos,linux
|
|
196
|
+
|
|
197
|
+
# Persist only after human review; this still does not mutate the catalog.
|
|
198
|
+
npx . candidate propose ./candidate-dossier.json \
|
|
199
|
+
--id reviewed-id --category workflow \
|
|
200
|
+
--platforms windows,macos,linux \
|
|
201
|
+
--approve --output ./reviewed-id.proposal.json
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
See [Candidate intelligence and catalog trust](./docs/CANDIDATE_INTELLIGENCE.md) for the full admission and signed-release workflow.
|
|
205
|
+
|
|
206
|
+
## Know what is already installed
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
npx . status
|
|
210
|
+
npx . versions
|
|
211
|
+
npx . doctor
|
|
212
|
+
npx . health --explain
|
|
213
|
+
npx . capabilities
|
|
214
|
+
npx . compare <skill-name>
|
|
215
|
+
npx . adopt <skill-name> --agent codex
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`versions` invokes only bounded read-only `--version` commands with a sanitized environment. `health --explain` shows every scored dimension, cap, evidence item, uncertainty, and remediation; absent evidence receives zero rather than an invented neutral score.
|
|
219
|
+
|
|
220
|
+
`compare` uses fingerprints, embedded source evidence, names, capability relationships, and catalog evidence. A same-name result is a candidate match, never proof that two skills are identical. `adopt` takes Loadout ownership of one explicitly selected existing skill without changing its bytes.
|
|
221
|
+
|
|
222
|
+
## Project-aware activation
|
|
223
|
+
|
|
224
|
+
The cache, reviewed library, installed state, and active agent directories are separate states. Loadout can therefore retain a broad reviewed library while exposing only a small working set.
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
npx . recommend --project .
|
|
228
|
+
npx . activate --project . --limit 30
|
|
229
|
+
npx . optimize --project .
|
|
230
|
+
npx . optimize --project . --yes
|
|
231
|
+
npx . disable <package-or-package/skill>
|
|
232
|
+
npx . disable <package-or-package/skill> --yes
|
|
233
|
+
npx . enable <package-or-package/skill>
|
|
234
|
+
npx . enable <package-or-package/skill> --yes
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Dry-run is the default for mutations. Activation refuses unmanaged packages, drifted files, incomplete library copies, quarantined entries, and occupied targets.
|
|
238
|
+
|
|
239
|
+
## MCP without hidden execution
|
|
240
|
+
|
|
241
|
+
Loadout separates four actions that other installers often blur together:
|
|
242
|
+
|
|
243
|
+
1. inspect MCP evidence;
|
|
244
|
+
2. preview a configuration change;
|
|
245
|
+
3. apply that exact configuration with explicit risk approval;
|
|
246
|
+
4. optionally launch one exact reviewed artifact for a bounded JSON-RPC connection check.
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
npx . mcp --repository upstash/context7
|
|
250
|
+
npx . mcp-recipe playwright --config ./mcp.json
|
|
251
|
+
npx . mcp-recipe playwright --config ./mcp.json --verify
|
|
252
|
+
npx . mcp-recipe playwright --connect --approve-risk
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Credential-bearing recipes can reference the native OS credential store. Secrets are accepted through stdin, never written into Loadout JSON state, and injected only into the approved child process:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
printf '%s' "$GITHUB_PERSONAL_ACCESS_TOKEN" \
|
|
259
|
+
| npx . credentials set loadout.github --stdin
|
|
260
|
+
|
|
261
|
+
npx . mcp-recipe github-readonly --connect --approve-risk \
|
|
262
|
+
--credential GITHUB_PERSONAL_ACCESS_TOKEN=keychain:loadout.github
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Native backends are macOS Keychain, Linux Secret Service, and Windows Credential Manager. `mcp-recipe --connect` is opt-in, time-bounded, signal-cleaned, and restricted to the recipe's exact reviewed pin. General repository setup never launches third-party processes.
|
|
266
|
+
|
|
267
|
+
## Reproducible team loadouts
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
npx . init --name my-team
|
|
271
|
+
npx . add superpowers
|
|
272
|
+
npx . lock
|
|
273
|
+
npx . sync --manifest loadout.json # preview
|
|
274
|
+
npx . sync --manifest loadout.json --yes # apply transactionally
|
|
275
|
+
npx . audit --manifest loadout.json --lock loadout.lock
|
|
276
|
+
npx . export team.loadout.json --manifest loadout.json --lock loadout.lock
|
|
277
|
+
npx . import team.loadout.json # preview
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Manifests resolve catalog packages, Git repositories, local sources, and exact registry descriptors. Dependency cycles, incompatible versions, missing requirements, unsafe paths, and portable exports containing absolute local package paths are rejected. Imports do not silently replace files and snapshot destinations before an approved overwrite.
|
|
281
|
+
|
|
282
|
+
## Updates, evidence, and recovery
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
npx . alerts
|
|
286
|
+
npx . update
|
|
287
|
+
npx . update --package <package-id> --apply
|
|
288
|
+
npx . watch
|
|
289
|
+
npx . rollback
|
|
290
|
+
npx . audit --manifest loadout.json --lock loadout.lock
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Updates are planned before they are applied. Loadout checks managed hashes, reviewed commits, archive status, staleness evidence, permission changes, and replacement evidence. It will not treat a newer commit or a faster-growing repository as automatically safer or better.
|
|
294
|
+
|
|
295
|
+
`rollback` restores the most recent snapshot by default, or a specific snapshot with `--snapshot <id>`. Removal and configuration changes preserve unrelated files and unrelated MCP keys.
|
|
296
|
+
|
|
297
|
+
## Reproducible evaluation and shareable evidence
|
|
298
|
+
|
|
299
|
+
Loadout now includes the versioned [Evaluation Protocol v1](./docs/EVALUATION_PROTOCOL_V1.md). A campaign can be validated, deterministically scheduled, and worst-case priced without contacting a model provider:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
npx . benchmark plan ./campaign.json
|
|
303
|
+
npx . benchmark plan ./campaign.json \
|
|
304
|
+
--run-id first-run --output ./benchmark-run.json --json
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Planning rejects unbounded or edited metadata and writes a resumable, content-free run record. It does **not** make a model call. The isolated paid runner and real fixture evidence remain separate release gates; Loadout will not label a source benchmarked from a plan alone.
|
|
308
|
+
|
|
309
|
+
Generate or compare privacy-safe aggregate artifacts:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
npx . report --json > before.json
|
|
313
|
+
npx . card --output LOADOUT_CARD.md
|
|
314
|
+
npx . report --json > after.json
|
|
315
|
+
npx . compare-loadouts before.json after.json
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
The card excludes project paths and names, prompts, code, filenames, repository names, and credentials. Its Agent Health Score reports evidence coverage and explicitly does not claim universal quality or task improvement.
|
|
319
|
+
|
|
320
|
+
## Supported agents and platforms
|
|
321
|
+
|
|
322
|
+
| Agent | Skill management | Additional native/adapted components |
|
|
323
|
+
| -------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
324
|
+
| Codex | Native | Agents and scoped root files are native; commands, MCP, and plugin contents are adapted |
|
|
325
|
+
| Claude Code | Native | Commands, agents, and scoped root files are native; MCP and plugin contents are adapted |
|
|
326
|
+
| Cursor | Native | Rules, commands, agents, and scoped root files are native; MCP and plugin contents are adapted |
|
|
327
|
+
| Gemini CLI | Native | Commands and scoped root files are native; plugin contents are adapted |
|
|
328
|
+
| OpenCode | Native, at `~/.config/opencode/skills` | Commands, agents, and scoped root files are native; plugin contents are adapted |
|
|
329
|
+
| Hermes | Native | Skills are the currently claimed automatic install path |
|
|
330
|
+
| Windsurf | Yes, at `~/.codeium/windsurf/skills` | Skills only |
|
|
331
|
+
| Cline | Yes, at `~/.cline/skills` | Skills only |
|
|
332
|
+
| GitHub Copilot | Yes, at `~/.copilot/skills` | Skills only |
|
|
333
|
+
| Roo Code | Yes, at `~/.roo/skills` | Skills only |
|
|
334
|
+
| Kiro CLI | Yes, at `~/.kiro/skills` | Skills only |
|
|
335
|
+
| Junie | Yes, at `~/.junie/skills` | Skills only |
|
|
336
|
+
|
|
337
|
+
Run `npx . capabilities` for the authoritative `native`, `adapted`, or `unsupported` matrix used by the planner itself. `npx . capabilities --gaps` turns every unsupported combination into an evidence-gated engineering backlog; unsupported components are skipped rather than falsely converted.
|
|
338
|
+
|
|
339
|
+
macOS, Linux, and native Windows paths are supported. WSL is intentionally treated as Linux and uses its POSIX `$HOME`; Loadout never silently crosses into the Windows profile under `/mnt/c`. `LOADOUT_USER_HOME` and `LOADOUT_HOME` provide isolated roots for testing.
|
|
340
|
+
|
|
341
|
+
## Safety model
|
|
342
|
+
|
|
343
|
+
- **Preview first:** mutating commands are dry-run by default.
|
|
344
|
+
- **Immutable input:** screened sources are fetched at exact commits and verified.
|
|
345
|
+
- **Narrow copying:** setup copies discovered component directories; it does not run repository installers.
|
|
346
|
+
- **Transactional writes:** a failed multi-package operation restores prior state.
|
|
347
|
+
- **Owned-file boundaries:** remove and rollback touch only recorded managed targets.
|
|
348
|
+
- **Integrity checks:** drift blocks unsafe enable, update, and removal operations.
|
|
349
|
+
- **Conflict handling:** exact target collisions are resolved deterministically and reported; evidenced hard conflicts block the operation.
|
|
350
|
+
- **Secret boundaries:** credential values stay in the native OS store and out of manifests, lockfiles, reports, and logs.
|
|
351
|
+
- **Honest adapters:** the installer and capability report share the same compatibility matrix.
|
|
352
|
+
- **Explicit execution:** sandbox commands and real MCP connection checks require separate approval.
|
|
353
|
+
|
|
354
|
+
Read [Compatibility policy](./docs/COMPATIBILITY_POLICY.md), [Active-set contract](./docs/ACTIVE_SET.md), [Provenance and comparison](./docs/PROVENANCE_AND_COMPARISON.md), and [Credential and update policy](./docs/CREDENTIAL_AND_UPDATE_POLICY.md) for the precise contracts.
|
|
355
|
+
|
|
356
|
+
## Command map
|
|
357
|
+
|
|
358
|
+
| Goal | Commands |
|
|
359
|
+
| ---------------------- | ------------------------------------------------------------------------------------ |
|
|
360
|
+
| Onboard | `upgrade`, `setup`, `scan`, `status`, `versions`, `health`, `demo` |
|
|
361
|
+
| Find and compare | `catalog`, `search`, `discover`, `candidate`, `review-queue`, `compare`, `recommend` |
|
|
362
|
+
| Manage active skills | `library`, `activate`, `optimize`, `enable`, `disable`, `adopt` |
|
|
363
|
+
| Maintain safely | `health`, `alerts`, `update`, `watch`, `remove`, `rollback`, `audit` |
|
|
364
|
+
| Share desired state | `init`, `add`, `unadd`, `lock`, `sync`, `export`, `import` |
|
|
365
|
+
| Configure MCP | `mcp`, `mcp-config`, `codex-mcp-config`, `mcp-recipe` |
|
|
366
|
+
| Credentials and models | `credentials`, `models` |
|
|
367
|
+
| Evaluate evidence | `benchmark`, `inspect`, `evaluate`, `head-to-head`, `canary`, `outcome` |
|
|
368
|
+
| Share safe evidence | `report`, `share`, `card`, `compare-loadouts` |
|
|
369
|
+
| Package and registry | `create`, `pack`, `publish`, `registry-serve` |
|
|
370
|
+
| Operate | `completion`, `autopilot`, `schedule`, `unschedule`, `tool`, `dashboard`, `serve` |
|
|
371
|
+
|
|
372
|
+
Use `npx . <command> --help` for exact options. Shell completion is available for Bash, Zsh, Fish, and PowerShell:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
npx . completion zsh > ~/.zfunc/_loadout
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## How it works
|
|
379
|
+
|
|
380
|
+
```mermaid
|
|
381
|
+
flowchart LR
|
|
382
|
+
A["Detect and scan agents"] --> B["Select screened sources"]
|
|
383
|
+
B --> C["Fetch exact Git commits"]
|
|
384
|
+
C --> D["Inspect skills and MCP evidence"]
|
|
385
|
+
D --> E["Resolve overlaps and safety findings"]
|
|
386
|
+
E --> F["Preview exact targets"]
|
|
387
|
+
F --> G{"Explicit approval?"}
|
|
388
|
+
G -->|No| H["No profile mutation"]
|
|
389
|
+
G -->|Yes| I["Snapshot and transactional apply"]
|
|
390
|
+
I --> J["Hash verification, health, rollback"]
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
Loadout state lives outside the repository under `~/.loadout` by default. Agent content is written only to the detected agent's documented user directory. The optional dashboard is a loopback diagnostics surface; the full product journey remains available through the CLI.
|
|
394
|
+
|
|
395
|
+
## Test everything before touching a real profile
|
|
396
|
+
|
|
397
|
+
The automated tests use disposable Loadout and user homes.
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
npm run verify
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
`verify` runs formatting, lint, typechecking, catalog/discovery evidence checks, all
|
|
404
|
+
unit and integration tests, the real CLI product flow, an installed npm-tarball smoke
|
|
405
|
+
test, and the 1,000-skill performance gate. Use `npm run verify:full` to include the
|
|
406
|
+
optional Playwright dashboard check.
|
|
407
|
+
|
|
408
|
+
Then follow **[the complete feature test matrix](./docs/FEATURE_TEST_MATRIX.md)** to
|
|
409
|
+
exercise every CLI command and authority boundary, or the shorter **[disposable
|
|
410
|
+
end-to-end guide](./docs/TESTING.md)** for Power/Maximum, optimization, lifecycle, and
|
|
411
|
+
rollback on virtual Codex and Claude Code profiles.
|
|
412
|
+
|
|
413
|
+
## Current limits
|
|
414
|
+
|
|
415
|
+
- The npm package is prepared but not yet published.
|
|
416
|
+
- The bundled catalog is technically screened and finite; only the stricter Stable subset is currently marked recommended, and discovery leads do not auto-promote themselves.
|
|
417
|
+
- Public GitHub is the default source. Private GitHub discovery requires explicit authorization through an environment or native credential reference.
|
|
418
|
+
- Skill components are the only components installed automatically by broad setup. MCP-only records require an explicit recipe or configuration target.
|
|
419
|
+
- Executable tools are never smuggled into broad setup. Graphify has a separately previewed, pinned, credential-isolated, reversible runtime recipe; additional runtime tools still require the same reviewed-recipe treatment.
|
|
420
|
+
- Six catalog records currently have `NOASSERTION` license status and need upstream-license review before a public release decision.
|
|
421
|
+
- Additional component types are installed only where the adapter reports tested support. Loadout does not promise perfect conversion of arbitrary hooks, subagents, plugins, or proprietary formats.
|
|
422
|
+
- The included registry server is for local development or self-hosting. No public Loadout registry service is deployed.
|
|
423
|
+
- Ranking and evaluation explain bounded evidence; they do not scientifically prove that one configuration is best for every person or task.
|
|
424
|
+
- Benchmark campaign planning is implemented, but no bundled source is called benchmarked until the isolated runner, real fixtures, and signed promotion evidence are complete.
|
|
425
|
+
|
|
426
|
+
## Contributing
|
|
427
|
+
|
|
428
|
+
Catalog additions need more than popularity. A proposal should include an immutable commit, inspectable component evidence, license status, supported platforms, category/overlap analysis, and a reason it improves the existing catalog. Discovery candidates should pass review before promotion.
|
|
429
|
+
|
|
430
|
+
Before opening a pull request:
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
npm run verify
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
Useful references:
|
|
437
|
+
|
|
438
|
+
- [Catalog and all upstream credits](./docs/CATALOG.md)
|
|
439
|
+
- [Daily generated discovery report](./docs/DISCOVERED.md)
|
|
440
|
+
- [Catalog ranking and conflict policy](./docs/CATALOG_POLICY.md)
|
|
441
|
+
- [Testing guide](./docs/TESTING.md)
|
|
442
|
+
- [Complete CLI feature test matrix](./docs/FEATURE_TEST_MATRIX.md)
|
|
443
|
+
- [Evaluation protocol](./docs/EVALUATION_PROTOCOL.md)
|
|
444
|
+
- [Community discovery policy](./docs/COMMUNITY_DISCOVERY.md)
|
|
445
|
+
- [Candidate intelligence and signed catalog trust](./docs/CANDIDATE_INTELLIGENCE.md)
|
|
446
|
+
- [Security policy](./SECURITY.md)
|
|
447
|
+
- [Canonical engineering plan](./MASTER_PLAN.md)
|
|
448
|
+
|
|
449
|
+
## License
|
|
450
|
+
|
|
451
|
+
Loadout itself is licensed under the [MIT License](./LICENSE). Catalog entries remain governed by their respective upstream licenses and terms; inclusion is attribution and discovery metadata, not relicensing.
|
|
452
|
+
|
|
453
|
+
Built for the OpenAI Build Week **Developer Tools** category.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Loadout threat model
|
|
2
|
+
|
|
3
|
+
Loadout handles third-party repositories and agent configuration, so its safety boundary is deliberately conservative.
|
|
4
|
+
|
|
5
|
+
## Protected actions
|
|
6
|
+
|
|
7
|
+
- Repository discovery uses a shallow Git fetch and reads files; it does not run package managers, lifecycle hooks, binaries, or scripts.
|
|
8
|
+
- Updates are compared by commit and file hash before mutation.
|
|
9
|
+
- New or changed scripts, hooks, binaries, embedded secret-like material, and suspicious instruction patterns are blocking findings.
|
|
10
|
+
- Network domains and environment-variable names are reported without exposing values. They require review when a policy or caller treats them as sensitive.
|
|
11
|
+
- Blocked updates can be quarantined as metadata under `$LOADOUT_HOME/quarantine`. Quarantine never installs or executes the fetched repository.
|
|
12
|
+
- Approved changes still run through a transactional snapshot and rollback path; approval is a human acknowledgement, not a claim that the package is safe.
|
|
13
|
+
|
|
14
|
+
## Explicit non-guarantees
|
|
15
|
+
|
|
16
|
+
Static inspection cannot prove that a package is benign. It may miss obfuscated behavior, interpreter-specific behavior, malicious content hidden in generated files, or risks introduced by an agent consuming a text instruction. Stars, repository age, and “official” labels are discovery signals, not security proofs.
|
|
17
|
+
|
|
18
|
+
Loadout does not currently sandbox arbitrary executables or automatically execute third-party installers. Users should review diffs, licenses, requested permissions, and provenance before approving a change.
|
package/SIMPLE_PLAN.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Loadout plan — simple version
|
|
2
|
+
|
|
3
|
+
Loadout's primary experience is CLI-first:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx loadout-ai
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
It detects installed agents, scans the actual skills already present, and recommends a
|
|
10
|
+
small Stable foundation. Maximum Library and Custom are explicit alternatives. It
|
|
11
|
+
previews reviewed pinned sources, exact overlaps, capacity, and safety findings before
|
|
12
|
+
one rollback-safe transaction. The dashboard is optional diagnostics.
|
|
13
|
+
|
|
14
|
+
Loadout also provides the package-manager operations:
|
|
15
|
+
|
|
16
|
+
- Find, install, update, remove, create, share, and synchronize AI-agent add-ons.
|
|
17
|
+
- Work with skills, commands, rules, agents, plugins, and MCP tools.
|
|
18
|
+
- Support Codex, Claude Code, Cursor, and more from one setup file.
|
|
19
|
+
|
|
20
|
+
Loadout's four major advantages are:
|
|
21
|
+
|
|
22
|
+
1. **Safety:** scan first, explain every change, block dangerous behavior, and never
|
|
23
|
+
touch unrelated files.
|
|
24
|
+
2. **Recovery:** back up before changes and provide one-command undo.
|
|
25
|
+
3. **Guidance:** check setup health and recommend tested add-on collections for the
|
|
26
|
+
user's project.
|
|
27
|
+
4. **Optimization:** keep a broad reviewed library but expose only the best supported,
|
|
28
|
+
non-overlapping active set for the current agent and project.
|
|
29
|
+
|
|
30
|
+
The original build order was:
|
|
31
|
+
|
|
32
|
+
1. Finish the reliable package-manager foundation.
|
|
33
|
+
2. Match OpenPackage's package types, sources, synchronization, and publishing.
|
|
34
|
+
3. Add health checks, security scanning, safe updates, recommendations, and profiles.
|
|
35
|
+
4. Keep the dashboard optional and prove every supported platform with tests.
|
|
36
|
+
|
|
37
|
+
That foundation is now integrated on `main`. [MASTER_PLAN.md](./MASTER_PLAN.md) is the
|
|
38
|
+
only canonical checklist; contributor branches and notes are historical inputs, not
|
|
39
|
+
separate sources of project status. Phase 12 now tracks provenance for unmanaged
|
|
40
|
+
skills, evidence-backed comparison, library-versus-active-set state, safe adoption and
|
|
41
|
+
enable/disable, project activation, guided optimization, category evaluations, daily
|
|
42
|
+
review queues, provider/MCP workflows, CLI polish, npm publication, and public-beta
|
|
43
|
+
testing. Catalog expansion, legal review, keychains, additional adapters, and submission
|
|
44
|
+
work remain explicit rather than hidden behind earlier checked implementation proofs.
|