pluribus-context 0.2.0 → 0.3.3
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/CHANGELOG.md +104 -0
- package/README.md +143 -25
- package/bin/pluribus.js +61 -2
- package/docs/ci-audit-example.md +80 -0
- package/docs/context-drift-audit.md +193 -0
- package/docs/context-drift-taxonomy.md +83 -0
- package/docs/context-file-review.md +102 -0
- package/docs/migrate-existing-context.md +189 -0
- package/docs/pre-commit-audit.md +67 -0
- package/docs/quickstart.md +141 -0
- package/docs/release-checklist.md +42 -8
- package/docs/when-to-use-pluribus.md +95 -0
- package/examples/context-drift-audit/.cursorrules +30 -0
- package/examples/context-drift-audit/.github/copilot-instructions.md +28 -0
- package/examples/context-drift-audit/CLAUDE.md +55 -0
- package/examples/context-drift-audit/README.md +31 -0
- package/examples/context-drift-audit/pluribus.md +35 -0
- package/examples/git-hooks/pre-commit +11 -0
- package/examples/github-actions/pluribus-audit.yml +26 -0
- package/package.json +26 -11
- package/schemas/audit-result.schema.json +119 -0
- package/src/commands/audit.js +365 -0
- package/src/commands/init.js +20 -4
- package/src/index.js +1 -0
- package/src/utils/version.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,111 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
3
5
|
All notable changes to Pluribus are documented here.
|
|
4
6
|
|
|
7
|
+
## 0.3.3 — Publish-window rehearsal hardening
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Make the guarded `release:publish -- --dry-run` rehearsal check the same Git tag/HEAD alignment before any live OTP window, so tag drift is caught without touching npm.
|
|
12
|
+
- Carry the pending source-install documentation forward to the immutable GitHub `v0.3.3` tag while npm `latest` remains `0.3.0`.
|
|
13
|
+
|
|
14
|
+
## 0.3.2 — Release artifact reconciliation
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Reconcile the npm publish target after the GitHub `v0.3.1` tag drifted from `main`: bump the pending npm release to `0.3.2` so the next publish can map to a fresh immutable GitHub tag instead of reusing the older `v0.3.1` artifact.
|
|
19
|
+
- Guard `release:publish` against publishing an npm package version from a different commit than its matching GitHub release tag.
|
|
20
|
+
- Keep temporary source-install documentation pinned to the immutable GitHub release tag for the package version being prepared while npm `latest` remains `0.3.0`.
|
|
21
|
+
|
|
22
|
+
## 0.3.1 — npm README cleanup
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Pin temporary source-install documentation to the immutable GitHub release tag `v0.3.2` instead of `main` while npm `latest` remains `0.3.0`, and make the release verifier accept the versioned tag path for unreleased `0.3.2` commands.
|
|
27
|
+
- Block moving GitHub source-install references in docs, examples, issue templates, and changelog while npm `latest` is behind the local package, so partial-release copy-paste paths stay tied to the immutable tag.
|
|
28
|
+
- Clarify the npm 2FA publish path in the release checklist, including the guarded `npm run release:publish -- --otp <one-time-code>` command and the rule to pause distribution if a GitHub release exists before npm `latest` is updated.
|
|
29
|
+
- Verify that `docs/pre-commit-audit.md` embeds the same hook body as `examples/git-hooks/pre-commit`, so the local copy-paste guard and packaged git-hook example cannot drift into different audit commands.
|
|
30
|
+
- Verify that `docs/ci-audit-example.md` includes an exact copy of `examples/github-actions/pluribus-audit.yml`, so the copy-paste CI guide and packaged workflow example cannot drift into different audit commands.
|
|
31
|
+
- Run the full `npm run release:verify` gate in CI, with CI-safe detached checkout handling, so local-only release guards for docs, package metadata, npm smoke, tarball smoke, and publish dry-run cannot drift behind the public pipeline.
|
|
32
|
+
- Verify that docs and contributor-facing GitHub issue-template links point to existing `.github/ISSUE_TEMPLATE` files, and that every public feedback template is linked somewhere in the docs, so first-run feedback paths cannot silently 404 or disappear.
|
|
33
|
+
- Make `npm run release:publish` require the public `latest` dist-tag and verify that `npm view pluribus-context version` matches the just-published package before running `published:smoke`, and verify the publish script syntax in `release:verify`, so a publish under the wrong tag cannot look successful.
|
|
34
|
+
- Republish the post-0.3.0 README/docs cleanup so the npm package page no longer tells users that `audit` requires a source install or that npm latest may still be `0.2.0`.
|
|
35
|
+
- Clarify first-run write safety in the README and quickstart: `audit`, `validate`, and `sync --dry-run` are read-only; `init` writes only `pluribus.md`; `sync` writes only generated AI context files; remote import cache/lock writes require explicit `--update-imports`.
|
|
36
|
+
- Keep the published path explicit: `npx --yes pluribus-context@latest audit` is now the default first-run check.
|
|
37
|
+
- Clarify when Pluribus complements dedicated context linters/drift auditors versus replacing one-way sync maintenance.
|
|
38
|
+
- Expand package keywords for discoverability around `context-drift`, `AGENTS.md`, Cursor rules, and AI coding agents.
|
|
39
|
+
- Add a dedicated GitHub issue template for read-only `pluribus audit` feedback from real repos, plus links to the audit guide and workflow discussion.
|
|
40
|
+
- Make quickstart and audit feedback templates point to the current published `npx --yes pluribus-context@latest ...` commands so first-run reports are easier to reproduce.
|
|
41
|
+
- Clarify that Pluribus detects file-level output drift, not runtime precedence issues where a tool deprioritizes a correct context file after compaction/summarization.
|
|
42
|
+
- Add a lightweight runtime-loading sanity check for users who want to confirm a generated context file is actually loaded before relying on it.
|
|
43
|
+
- Add a context drift taxonomy that separates file-level output drift, source-of-truth drift, runtime loading/precedence drift, and behavioral drift so users can choose the right check before adopting Pluribus.
|
|
44
|
+
- Add `pluribus audit --json` so CI jobs, smoke scripts, and external tools can consume drift results without parsing emoji/text output.
|
|
45
|
+
- Add `pluribus audit --github-annotations` for inline GitHub Actions check annotations when generated context files are missing or drifted.
|
|
46
|
+
- Add `pluribus audit --ci` as a shortcut for `--strict --github-annotations` in GitHub Actions.
|
|
47
|
+
- Add `schemas/audit-result.schema.json` to make the `pluribus audit --json` contract explicit for CI wrappers, dashboards, and migration tools.
|
|
48
|
+
- Add `pluribus audit --json --output <file>` so CI jobs can save audit results as artifacts without shell redirection or noisy stdout.
|
|
49
|
+
- Add a copy-paste CI audit guide and GitHub Actions example for enforcing generated context files in pull requests.
|
|
50
|
+
- Add a pre-commit audit guide and sample git hook for catching context drift before commits leave a developer machine.
|
|
51
|
+
- Make the README and quickstart choose between two safe first commands: read-only `audit` for existing repos and `init` for brand-new repos.
|
|
52
|
+
- Normalize one-off `npx` examples to `npx --yes pluribus-context@latest ...` so copy-paste docs do not pause on npm's install prompt or rely on implicit latest resolution.
|
|
53
|
+
- Add explicit version-availability notes while `main` documents `0.3.2` audit CI flags and `init --dry-run`, while npm latest remains `0.3.0`.
|
|
54
|
+
- Use exact `github:caioribeiroclw-pixel/pluribus#v0.3.2` tag-install commands for `init --dry-run` previews so users do not accidentally run npm `0.3.0` commands that still write `pluribus.md`.
|
|
55
|
+
- Use exact `github:caioribeiroclw-pixel/pluribus#v0.3.2` tag-install commands for `audit --ci`, `--json`, `--output`, and `--github-annotations` docs and examples until `0.3.2` is published to npm, so CI copy-paste paths do not imply those flags are available in npm `0.3.0`.
|
|
56
|
+
- Use `audit --ci` in the copy-paste GitHub Actions example to reduce command length.
|
|
57
|
+
- Clarify the README vision so the source of truth is `pluribus.md` plus optional `# @import` files, not an obsolete multi-file `pluribus/` directory layout.
|
|
58
|
+
- Add `pluribus init --dry-run` so first-time users can preview the `pluribus.md` scaffold before writing files.
|
|
59
|
+
- Add `npm run release:verify` to run the full release gate and report whether npm auth is the remaining publish blocker.
|
|
60
|
+
- Expand `npm run release:smoke` to verify the first-run `init --dry-run` preview and the copy-paste `audit --ci --json --output` path from the packaged tarball.
|
|
61
|
+
- Add `npm run published:smoke` to verify the currently published npm `latest` package still has a working public first-run path (`--version`, `--help`, read-only `audit`, `init`, `validate`, and `sync --dry-run`).
|
|
62
|
+
- Run the published npm smoke from `npm run release:verify` whenever a published package exists, so release readiness checks also validate the package users can install today.
|
|
63
|
+
- Extend the release verification guardrail to catch bare `pluribus ...` copy-paste examples with unreleased `init --dry-run` or CI/JSON audit flags while npm latest is still behind `main`.
|
|
64
|
+
- Make `npm run release:verify` distinguish missing npm auth from invalid/stale configured tokens, so the 0.3.2 publish path points to the right remediation without exposing credentials.
|
|
65
|
+
- Reject unknown CLI options per command before executing, so typoed or not-yet-published flags fail safely instead of being silently ignored.
|
|
66
|
+
- Make the packaged release smoke verify that unknown init flags fail without creating `pluribus.md`, so fail-safe option parsing is tested from the installed tarball, not only unit tests.
|
|
67
|
+
- Remove the unsupported `init --force` flag from the release smoke so release checks only exercise documented CLI behavior.
|
|
68
|
+
- Remove the same unsupported `init --force` flag from the published npm smoke so post-publish validation stays compatible with fail-safe unknown-option parsing.
|
|
69
|
+
- Make the published npm smoke verify fail-safe unknown-option parsing after `0.3.2` is published, so post-publish validation catches a regression back to silently ignored CLI flags.
|
|
70
|
+
- Update the bug report issue template to use non-interactive `pluribus-context@latest` reproduction commands and a current version placeholder, reducing stale first-run reports.
|
|
71
|
+
- Standardize README/docs/examples on `npx --yes pluribus-context@latest ...` for published commands and extend the release guard so unreleased flags are blocked with or without `@latest` while npm latest is behind `main`.
|
|
72
|
+
- Make `npm run published:smoke` verify the npm package README after `0.3.2` is published, catching stale package-page copy like `npx pluribus-context init` before future distribution pushes.
|
|
73
|
+
- Add `npm run release:publish` as the guarded publish path: it runs the full release verification before publishing, refuses credential-like CLI arguments, and runs the published npm smoke after a real publish.
|
|
74
|
+
- Extend `npm run release:verify` to check docs, examples, and issue templates for reproducible published npm commands (`npx --yes pluribus-context@latest ...`) and unreleased flags while npm latest is still behind `main`.
|
|
75
|
+
- Include `CONTRIBUTING.md` in the same release verification copy-paste scan, and update its audit feedback command to the reproducible `npx --yes pluribus-context@latest ...` form.
|
|
76
|
+
- Link audit feedback directly from the README/npm package page and make the published README smoke guard the quickstart + audit feedback paths.
|
|
77
|
+
- Link quickstart and audit docs directly to their issue templates, and verify those feedback paths in the release gate so first-run users do not have to choose a generic issue manually.
|
|
78
|
+
- Expand npm discovery keywords around agent rules, AI context, Codex/Aider, and drift detection so the package metadata matches the searches that surface adjacent tools.
|
|
79
|
+
- Rewrite the npm package description for search-result clarity and verify core discovery metadata in the release gate before publishing.
|
|
80
|
+
- Make the published npm smoke verify discovery description/keywords after `0.3.2` is published, so post-publish validation catches stale registry metadata before distribution pushes.
|
|
81
|
+
- Clarify the "When to use Pluribus" guide for users comparing adjacent rules-sync packages, with a sharper split between lightweight rules sync, tool-native prompt managers, one-way converters, and Pluribus' source-of-truth plus audit workflow.
|
|
82
|
+
- Make the published npm smoke verify that the package README keeps a visible path to the "When to use Pluribus" comparison guide after `0.3.2` is published.
|
|
83
|
+
- Run packaged CLI and published npm smoke checks in CI, so distribution regressions are caught on every push instead of only during local release prep.
|
|
84
|
+
- Surface npm weekly downloads and CI status badges in the README/npm package page, and verify those trust/distribution badges in the release and published smoke gates.
|
|
85
|
+
- Surface the audit feedback issue template directly from `pluribus audit` text and JSON output, so noisy first-run results can turn into structured reports without searching the docs.
|
|
86
|
+
- Verify the audit feedback link in packaged and published smoke checks, so the CLI feedback loop cannot disappear from the installed artifact unnoticed.
|
|
87
|
+
- Make global install examples explicit with `npm install -g pluribus-context@latest`, and have the release gate block ambiguous global install copy-paste commands.
|
|
88
|
+
- Keep `pluribus --help` in sync with the actual built-in tool adapters, and verify that in release/published smoke checks, so first-run users see Copilot, Windsurf, Continue, and Zed as supported `--tools` values instead of the original three-tool default.
|
|
89
|
+
- Add the full built-in adapter list to the quickstart and verify it in the release gate, so users can discover OpenClaw, Windsurf, Continue, and Zed before deciding which `--tools` values to try.
|
|
90
|
+
- Make issue templates ask for the exact `--version` output instead of a hard-coded version placeholder, and verify that guard in the release gate so feedback stays accurate while npm latest and `main` differ.
|
|
91
|
+
- Align `CONTRIBUTING.md` with the current built-in adapter list and integration request template, and verify that contributor-facing adapter guidance does not drift behind the CLI.
|
|
92
|
+
- Verify all built-in adapter outputs in packaged and published smoke checks, so docs/help cannot claim OpenClaw, Windsurf, Continue, or Zed support while the installed artifact fails to generate their files.
|
|
93
|
+
- Verify README/npm package-page adapter output copy in release and published smoke checks, so the top-of-funnel landing page cannot regress to the old three-tool story while the CLI supports more adapters.
|
|
94
|
+
- Verify that relative links from the README/npm package page point to files included in the npm tarball, so published docs links do not break after packaging.
|
|
95
|
+
- Extend packaged Markdown link verification beyond the README to docs/spec/examples in the npm tarball, so follow-on package-page navigation cannot drift to missing files.
|
|
96
|
+
|
|
97
|
+
## 0.3.0 — Audit workflow and first-run docs alignment
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
|
|
101
|
+
- Add `pluribus audit`, a read-only command that compares generated tool files with `pluribus.md`, reports missing or drifted outputs, supports `--strict` for CI, and scans existing AI context files when a project has not adopted Pluribus yet.
|
|
102
|
+
- Add first-run docs for quickstart, context drift audit, existing context migration, context-file review, when to use Pluribus versus one-way converters, and issue templates so early users can report install, adapter, security-review, and migration friction with concrete details.
|
|
103
|
+
|
|
104
|
+
### Changed
|
|
105
|
+
|
|
106
|
+
- Align the package README for the npm publish so the npm package page shows the real `npx --yes pluribus-context` install path, npm badge, 60-second smoke test, `audit` workflow, and published-status roadmap.
|
|
107
|
+
- Replace temporary source-install notes with the published `pluribus-context@0.3.0` audit path.
|
|
108
|
+
|
|
5
109
|
## 0.2.0 — Package-ready CLI release
|
|
6
110
|
|
|
7
111
|
Pluribus 0.2.0 is the first npm-ready release of the CLI for keeping intentional AI context in one versioned source and syncing it to the files each tool expects. It supersedes the earlier GitHub-only v0.1.0 alpha release from March.
|
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Pluribus
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/pluribus-context)
|
|
4
|
+
[](https://www.npmjs.com/package/pluribus-context)
|
|
5
|
+
[](https://github.com/caioribeiroclw-pixel/pluribus/actions/workflows/ci.yml)
|
|
3
6
|
[](https://x.com/RibeiroCaioCLW)
|
|
4
7
|
[](LICENSE)
|
|
5
8
|
|
|
@@ -32,20 +35,21 @@ You end up maintaining **5+ files** that say roughly the same thing — your pro
|
|
|
32
35
|
|
|
33
36
|
**Pluribus** is a universal format for intentional context in AI-assisted development.
|
|
34
37
|
|
|
35
|
-
Write your project context **once**, in
|
|
38
|
+
Write your project context **once**, in `pluribus.md`. Keep it as a single file for small projects, or compose shared team/org Markdown with `# @import` when the context needs to be reused.
|
|
36
39
|
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
├──
|
|
40
|
-
|
|
41
|
-
├──
|
|
42
|
-
└──
|
|
40
|
+
```text
|
|
41
|
+
your-project/
|
|
42
|
+
├── pluribus.md # source of truth
|
|
43
|
+
└── shared/
|
|
44
|
+
├── team-context.md # optional imported conventions
|
|
45
|
+
└── security-constraints.md # optional imported guardrails
|
|
43
46
|
```
|
|
44
47
|
|
|
45
|
-
Then:
|
|
48
|
+
Then preview or sync:
|
|
46
49
|
|
|
47
50
|
```bash
|
|
48
|
-
npx pluribus-context sync
|
|
51
|
+
npx --yes pluribus-context@latest sync --dry-run
|
|
52
|
+
npx --yes pluribus-context@latest sync
|
|
49
53
|
```
|
|
50
54
|
|
|
51
55
|
And it generates the right files for each tool:
|
|
@@ -69,14 +73,46 @@ And it generates the right files for each tool:
|
|
|
69
73
|
|
|
70
74
|
## Getting Started
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
> **Version note:** `pluribus audit` is published in `pluribus-context@0.3.0`. The CI-oriented audit flags and read-only init preview documented in the GitHub release tag `v0.3.3` (`--json`, `--output`, `--github-annotations`, `--ci`, `init --dry-run`) are prepared for the next npm patch release `0.3.3`; until that patch is published, use `@0.3.0` for the basic read-only audit, or use the explicit `github:...#v0.3.3` source command shown below when testing the tagged read-only preview flags.
|
|
77
|
+
|
|
78
|
+
### Pick the safe first command
|
|
79
|
+
|
|
80
|
+
If your repo already has AI context files such as `CLAUDE.md`, `.cursorrules`, Copilot instructions, or `AGENTS.md`, start with the read-only audit:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npx --yes pluribus-context@latest audit
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
It does not write files. Without `pluribus.md`, it lists existing AI context surfaces so you can decide what to migrate. With `pluribus.md`, it reports generated files that are missing or drifted.
|
|
87
|
+
|
|
88
|
+
If you are starting from scratch, preview the source-of-truth scaffold first, then create it when it looks right:
|
|
73
89
|
|
|
74
90
|
```bash
|
|
75
|
-
#
|
|
76
|
-
|
|
91
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
92
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus init --dry-run
|
|
93
|
+
|
|
94
|
+
# Published npm path; writes pluribus.md:
|
|
95
|
+
npx --yes pluribus-context@latest init
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### What Pluribus writes
|
|
99
|
+
|
|
100
|
+
Pluribus is intentionally narrow about filesystem changes:
|
|
101
|
+
|
|
102
|
+
- `audit`, `validate`, and `sync --dry-run` are read-only.
|
|
103
|
+
- `init` writes `pluribus.md` only. If that file already exists, it refuses to overwrite it.
|
|
104
|
+
- `sync` writes only the configured/generated AI context files such as `CLAUDE.md`, `.cursorrules`, `.github/copilot-instructions.md`, `AGENTS.md`, Windsurf/Continue rules, and `.rules`.
|
|
105
|
+
- Generated files include a `Generated by Pluribus ... do not edit manually` header so drift is easy to spot in review.
|
|
106
|
+
- Remote imports only touch `pluribus.lock.json` and `.pluribus/cache/remote/` when you explicitly pass `--update-imports`.
|
|
77
107
|
|
|
78
|
-
|
|
79
|
-
|
|
108
|
+
When in doubt, run `npx --yes pluribus-context@latest audit` or `npx --yes pluribus-context@latest sync --dry-run` first.
|
|
109
|
+
|
|
110
|
+
### Install
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Install globally if you prefer a persistent `pluribus` command
|
|
114
|
+
npm install -g pluribus-context@latest
|
|
115
|
+
pluribus --help
|
|
80
116
|
|
|
81
117
|
# Or clone and link locally
|
|
82
118
|
git clone https://github.com/caioribeiroclw-pixel/pluribus.git
|
|
@@ -84,21 +120,48 @@ cd pluribus
|
|
|
84
120
|
npm link
|
|
85
121
|
```
|
|
86
122
|
|
|
123
|
+
### 60-second smoke test
|
|
124
|
+
|
|
125
|
+
Want to see exactly what gets generated before adding it to a real project?
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
mkdir pluribus-demo && cd pluribus-demo
|
|
129
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
130
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus init --dry-run --name "Ana" --description "A Node.js service" --tools claude,cursor,copilot
|
|
131
|
+
|
|
132
|
+
# Published npm path; writes pluribus.md:
|
|
133
|
+
npx --yes pluribus-context@latest init --name "Ana" --description "A Node.js service" --tools claude,cursor,copilot
|
|
134
|
+
npx --yes pluribus-context@latest validate
|
|
135
|
+
npx --yes pluribus-context@latest sync --dry-run
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
If the preview looks right, run `npx --yes pluribus-context@latest sync` to write the tool-specific files.
|
|
139
|
+
|
|
140
|
+
For a fuller walkthrough, see the [Quickstart](docs/quickstart.md). To enforce generated context files in pull requests, use the [CI audit example](docs/ci-audit-example.md); to catch drift before commits leave your machine, use the [Pre-commit Audit Hook](docs/pre-commit-audit.md). If your repo already has `CLAUDE.md`, `.cursorrules`, Copilot instructions, or `AGENTS.md`, run a [Context Drift Audit](docs/context-drift-audit.md) first, try the intentionally drifted [audit example](examples/context-drift-audit/), then follow [Migrate Existing AI Context Files](docs/migrate-existing-context.md). Before committing shared or generated AI instructions, use the [Context File Review Checklist](docs/context-file-review.md). If you're deciding between Pluribus and a one-way rules converter, see [When to use Pluribus](docs/when-to-use-pluribus.md). If you are debugging "context drift" after compaction or long sessions, start with the [Context Drift Taxonomy](docs/context-drift-taxonomy.md) to separate file drift from runtime precedence drift.
|
|
141
|
+
|
|
87
142
|
### Usage
|
|
88
143
|
|
|
89
144
|
**1. Initialize your context file**
|
|
90
145
|
|
|
91
146
|
```bash
|
|
92
147
|
cd your-project/
|
|
93
|
-
pluribus
|
|
148
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
149
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus init --dry-run
|
|
150
|
+
|
|
151
|
+
# Published npm path; writes pluribus.md:
|
|
152
|
+
npx --yes pluribus-context@latest init
|
|
94
153
|
```
|
|
95
154
|
|
|
96
|
-
|
|
155
|
+
The dry-run prints the scaffold without writing files. The second command creates `pluribus.md` with all required sections scaffolded. Fill in your project context.
|
|
97
156
|
|
|
98
|
-
You can also use flags for non-interactive init:
|
|
157
|
+
You can also use flags for non-interactive init, including the same dry-run preview:
|
|
99
158
|
|
|
100
159
|
```bash
|
|
101
|
-
|
|
160
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
161
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus init --dry-run --name "Ana" --description "A background job runner" --tools claude,cursor,openclaw
|
|
162
|
+
|
|
163
|
+
# Published npm path; writes pluribus.md:
|
|
164
|
+
npx --yes pluribus-context@latest init --name "Ana" --description "A background job runner" --tools claude,cursor,openclaw
|
|
102
165
|
```
|
|
103
166
|
|
|
104
167
|
**2. Edit `pluribus.md`**
|
|
@@ -156,7 +219,51 @@ If you use remote imports and want to refresh the lock/cache while validating:
|
|
|
156
219
|
pluribus validate --update-imports
|
|
157
220
|
```
|
|
158
221
|
|
|
159
|
-
**5.
|
|
222
|
+
**5. Audit generated files before syncing**
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
pluribus audit
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
This is read-only. It compares existing generated files with what `pluribus.md` would produce, reports missing or drifted outputs, and can run in CI with `--strict`:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
pluribus audit --strict
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
In GitHub Actions, add annotations so drift appears inline in the check UI:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
238
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --strict --github-annotations
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
For GitHub Actions, `--ci` is the shorter equivalent of `--strict --github-annotations`:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
245
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --ci
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
For CI scripts, dashboards, or migration tooling, use machine-readable output:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
252
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --strict --json
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
To save the JSON as a CI artifact while keeping stdout quiet, add `--output`:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm:
|
|
259
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --strict --json --output pluribus-audit.json
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
The JSON shape is documented in [`schemas/audit-result.schema.json`](schemas/audit-result.schema.json) so CI wrappers and dashboards can validate integrations without scraping human output. For copy-paste enforcement, see the [CI audit example](docs/ci-audit-example.md) and the [Pre-commit Audit Hook](docs/pre-commit-audit.md).
|
|
263
|
+
|
|
264
|
+
If your project does not have `pluribus.md` yet, `pluribus audit` scans for known AI context files (`CLAUDE.md`, `.cursorrules`, Copilot instructions, `AGENTS.md`, Windsurf, Continue, Zed) so you know what to migrate.
|
|
265
|
+
|
|
266
|
+
**6. Sync to all your tools**
|
|
160
267
|
|
|
161
268
|
```bash
|
|
162
269
|
pluribus sync
|
|
@@ -253,7 +360,7 @@ See `spec/skills-format.md` for the skill file format.
|
|
|
253
360
|
- [x] Remote composable contexts MVP (explicit `--update-imports`, public GitHub/HTTPS, safety limits)
|
|
254
361
|
- [x] Remote imports hardening (lockfile/cache/digest offline mode, optional GitHub auth, and CI coverage)
|
|
255
362
|
- [ ] CI/CD: auto-sync on commit
|
|
256
|
-
- [
|
|
363
|
+
- [x] Published to npm as [`pluribus-context`](https://www.npmjs.com/package/pluribus-context)
|
|
257
364
|
|
|
258
365
|
## Building in Public
|
|
259
366
|
|
|
@@ -261,10 +368,19 @@ I'm documenting every step of building Pluribus — the decisions, the trade-off
|
|
|
261
368
|
|
|
262
369
|
Follow along: [@RibeiroCaioCLW](https://x.com/RibeiroCaioCLW)
|
|
263
370
|
|
|
264
|
-
If you've felt this pain,
|
|
371
|
+
If you've felt this pain, tell me about your setup. What tools do you use? How do you manage context today? What's broken?
|
|
372
|
+
|
|
373
|
+
- [Quickstart feedback](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=quickstart-feedback.yml) — if install, validate, or dry-run felt confusing
|
|
374
|
+
- [Audit feedback](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=audit-feedback.yml) — if read-only `pluribus audit` missed drift, was noisy, or left the next step unclear
|
|
375
|
+
- [Bug report](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=bug-report.yml) — if a command failed or generated the wrong output
|
|
376
|
+
- [Tool integration request](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=integration-request.yml) — if another AI tool should be supported
|
|
265
377
|
|
|
266
378
|
## Docs
|
|
267
379
|
|
|
380
|
+
- [Quickstart](docs/quickstart.md) — first install, validation, dry-run preview, and common friction
|
|
381
|
+
- [Migrate Existing AI Context Files](docs/migrate-existing-context.md) — move from `CLAUDE.md`, `.cursorrules`, Copilot instructions, or `AGENTS.md` to one source of truth
|
|
382
|
+
- [When to use Pluribus](docs/when-to-use-pluribus.md) — choose between sync, one-way conversion, and tool-native context files
|
|
383
|
+
- [Context File Review Checklist](docs/context-file-review.md) — review AI instructions as supply-chain artifacts before committing generated context
|
|
268
384
|
- [OpenClaw Integration](docs/openclaw-integration.md) — how Pluribus generates `AGENTS.md` for OpenClaw
|
|
269
385
|
- [Composable Contexts](docs/composable-contexts.md) — local/remote imports, merge behavior, and safety rules
|
|
270
386
|
- [Remote Composable Context Imports](docs/remote-composable-context-imports.md) — design notes for lockfile/cache/auth hardening
|
|
@@ -279,11 +395,13 @@ If you've felt this pain, [open an issue](https://github.com/caioribeiroclw-pixe
|
|
|
279
395
|
|
|
280
396
|
This project is just getting started. The best way to help right now:
|
|
281
397
|
|
|
282
|
-
1.
|
|
283
|
-
2.
|
|
284
|
-
3.
|
|
398
|
+
1. Try the 60-second smoke test above in a throwaway directory
|
|
399
|
+
2. ⭐ Star the repo if the problem resonates
|
|
400
|
+
3. 🗣️ [Open a quickstart feedback issue](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=quickstart-feedback.yml) if anything felt confusing
|
|
401
|
+
4. 🔎 [Open an audit feedback issue](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=audit-feedback.yml) if the read-only audit missed drift or felt noisy
|
|
402
|
+
5. 📣 Share with someone who maintains 3+ AI context files
|
|
285
403
|
|
|
286
|
-
Looking for first contributions? Check out the [open issues](https://github.com/caioribeiroclw-pixel/pluribus/issues). The next good contributions are
|
|
404
|
+
Looking for first contributions? Check out the [open issues](https://github.com/caioribeiroclw-pixel/pluribus/issues). The next good contributions are CI/CD workflow examples, real-world adapter feedback, and install/quickstart friction reports.
|
|
287
405
|
|
|
288
406
|
## License
|
|
289
407
|
|
package/bin/pluribus.js
CHANGED
|
@@ -9,9 +9,13 @@ import { runInit } from '../src/commands/init.js'
|
|
|
9
9
|
import { runSync } from '../src/commands/sync.js'
|
|
10
10
|
import { runValidate } from '../src/commands/validate.js'
|
|
11
11
|
import { runWatch } from '../src/commands/watch.js'
|
|
12
|
+
import { runAudit } from '../src/commands/audit.js'
|
|
12
13
|
import { parseArgs } from '../src/utils/args.js'
|
|
14
|
+
import { SUPPORTED_TOOLS } from '../src/skills/built-in.js'
|
|
13
15
|
import { VERSION } from '../src/utils/version.js'
|
|
14
16
|
|
|
17
|
+
const supportedToolsList = SUPPORTED_TOOLS.join(',')
|
|
18
|
+
|
|
15
19
|
const HELP = `
|
|
16
20
|
Pluribus v${VERSION} — Write your AI context once. Sync it to every tool.
|
|
17
21
|
|
|
@@ -22,13 +26,15 @@ COMMANDS
|
|
|
22
26
|
init Create a pluribus.md file in the current directory
|
|
23
27
|
sync Read pluribus.md and generate tool-specific output files
|
|
24
28
|
validate Validate pluribus.md before syncing
|
|
29
|
+
audit Compare generated tool files with pluribus.md without writing
|
|
25
30
|
watch Watch pluribus.md and auto-sync after changes
|
|
26
31
|
help Show this help message
|
|
27
32
|
|
|
28
33
|
OPTIONS (init)
|
|
29
34
|
--name Project/author name
|
|
30
35
|
--description One-line project description
|
|
31
|
-
--tools Comma-separated list of tools to enable (
|
|
36
|
+
--tools Comma-separated list of tools to enable (${supportedToolsList})
|
|
37
|
+
--dry-run Preview the scaffold without writing pluribus.md
|
|
32
38
|
|
|
33
39
|
OPTIONS (sync)
|
|
34
40
|
--dry-run Preview output without writing files
|
|
@@ -40,6 +46,16 @@ OPTIONS (validate)
|
|
|
40
46
|
--source Path to pluribus.md (default: ./pluribus.md)
|
|
41
47
|
--update-imports Refresh remote github:/https:// imports before validating
|
|
42
48
|
|
|
49
|
+
OPTIONS (audit)
|
|
50
|
+
--source Path to pluribus.md (default: ./pluribus.md)
|
|
51
|
+
--tools Override which tools to audit (comma-separated)
|
|
52
|
+
--update-imports Refresh remote github:/https:// imports before auditing
|
|
53
|
+
--strict Exit non-zero when generated files are missing or drifted
|
|
54
|
+
--ci Shortcut for --strict --github-annotations
|
|
55
|
+
--json Print machine-readable audit results
|
|
56
|
+
--output Write --json results to a file instead of stdout
|
|
57
|
+
--github-annotations Print GitHub Actions annotations for drift/missing outputs
|
|
58
|
+
|
|
43
59
|
OPTIONS (watch)
|
|
44
60
|
--source Path to pluribus.md (default: ./pluribus.md)
|
|
45
61
|
--tools Override which tools to sync (comma-separated)
|
|
@@ -49,18 +65,56 @@ OPTIONS (watch)
|
|
|
49
65
|
|
|
50
66
|
EXAMPLES
|
|
51
67
|
pluribus init
|
|
68
|
+
pluribus init --dry-run
|
|
52
69
|
pluribus init --name "Ana" --description "A task manager" --tools claude,cursor
|
|
53
70
|
pluribus sync
|
|
54
71
|
pluribus sync --dry-run
|
|
55
72
|
pluribus sync --tools claude,openclaw
|
|
56
73
|
pluribus sync --update-imports
|
|
57
74
|
pluribus validate
|
|
75
|
+
pluribus audit
|
|
76
|
+
pluribus audit --strict
|
|
77
|
+
pluribus audit --ci
|
|
78
|
+
pluribus audit --json
|
|
79
|
+
pluribus audit --strict --json --output pluribus-audit.json
|
|
80
|
+
pluribus audit --strict --github-annotations
|
|
58
81
|
pluribus watch --tools claude,cursor
|
|
59
82
|
|
|
60
83
|
DOCS
|
|
61
84
|
https://github.com/caioribeiroclw-pixel/pluribus
|
|
62
85
|
`
|
|
63
86
|
|
|
87
|
+
const COMMAND_FLAGS = {
|
|
88
|
+
init: new Set(['name', 'description', 'tools', 'dry-run']),
|
|
89
|
+
sync: new Set(['dry-run', 'tools', 'source', 'update-imports']),
|
|
90
|
+
validate: new Set(['source', 'update-imports']),
|
|
91
|
+
audit: new Set(['source', 'tools', 'update-imports', 'strict', 'ci', 'json', 'output', 'github-annotations']),
|
|
92
|
+
watch: new Set(['source', 'tools', 'update-imports', 'dry-run', 'once', 'debounce']),
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function getFlagNames(argv) {
|
|
96
|
+
return argv
|
|
97
|
+
.filter((arg) => arg.startsWith('--') && arg.length > 2)
|
|
98
|
+
.map((arg) => {
|
|
99
|
+
const withoutPrefix = arg.slice(2)
|
|
100
|
+
const eqIdx = withoutPrefix.indexOf('=')
|
|
101
|
+
return eqIdx === -1 ? withoutPrefix : withoutPrefix.slice(0, eqIdx)
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function validateFlags(command, argv) {
|
|
106
|
+
const allowed = COMMAND_FLAGS[command]
|
|
107
|
+
if (!allowed) return
|
|
108
|
+
|
|
109
|
+
const unknown = [...new Set(getFlagNames(argv).filter((flag) => !allowed.has(flag)))]
|
|
110
|
+
if (unknown.length === 0) return
|
|
111
|
+
|
|
112
|
+
console.error(`❌ Unknown option${unknown.length === 1 ? '' : 's'} for \`${command}\`: ${unknown.map((flag) => `--${flag}`).join(', ')}`)
|
|
113
|
+
console.error(` Supported options: ${[...allowed].map((flag) => `--${flag}`).join(', ')}`)
|
|
114
|
+
console.error(' Run `pluribus help` for usage.')
|
|
115
|
+
process.exit(1)
|
|
116
|
+
}
|
|
117
|
+
|
|
64
118
|
async function main() {
|
|
65
119
|
const args = process.argv.slice(2)
|
|
66
120
|
|
|
@@ -75,7 +129,9 @@ async function main() {
|
|
|
75
129
|
}
|
|
76
130
|
|
|
77
131
|
const command = args[0]
|
|
78
|
-
const
|
|
132
|
+
const commandArgs = args.slice(1)
|
|
133
|
+
validateFlags(command, commandArgs)
|
|
134
|
+
const parsedArgs = parseArgs(commandArgs)
|
|
79
135
|
|
|
80
136
|
try {
|
|
81
137
|
switch (command) {
|
|
@@ -91,6 +147,9 @@ async function main() {
|
|
|
91
147
|
case 'watch':
|
|
92
148
|
await runWatch(parsedArgs)
|
|
93
149
|
break
|
|
150
|
+
case 'audit':
|
|
151
|
+
await runAudit(parsedArgs)
|
|
152
|
+
break
|
|
94
153
|
default:
|
|
95
154
|
console.error(`❌ Unknown command: "${command}"`)
|
|
96
155
|
console.log(`Run \`pluribus help\` for usage.`)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# CI audit example
|
|
2
|
+
|
|
3
|
+
Use this when `pluribus.md` is the source of truth and generated context files should stay current in pull requests.
|
|
4
|
+
|
|
5
|
+
`pluribus audit --strict` is read-only: it fails when a generated file is missing or drifted, but it does not rewrite anything in CI. The basic audit command is published in `pluribus-context@0.3.0`; the `--github-annotations`, `--json`, `--output`, and `--ci` flags below are available in the GitHub release tag `v0.3.3` while npm latest waits for the `0.3.3` publish. Until that patch is published, pin CI to `pluribus-context@0.3.0` for the strict text check, or test the new flags from the immutable GitHub tag with `--package github:caioribeiroclw-pixel/pluribus#v0.3.3`.
|
|
6
|
+
|
|
7
|
+
Use `--ci` in GitHub Actions when you want the shortest path: it is equivalent to `--strict --github-annotations`, so drift appears inline in the check UI and the job fails on drift. Use the explicit flags when composing custom outputs; pair annotations with `--json --output pluribus-audit.json` when you want a machine-readable artifact for dashboards or review comments. The output contract is documented in [`schemas/audit-result.schema.json`](../schemas/audit-result.schema.json).
|
|
8
|
+
|
|
9
|
+
## GitHub Actions
|
|
10
|
+
|
|
11
|
+
Create `.github/workflows/pluribus-audit.yml` in the repository that uses Pluribus:
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
name: Pluribus context audit
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
pull_request:
|
|
18
|
+
push:
|
|
19
|
+
branches:
|
|
20
|
+
- main
|
|
21
|
+
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
audit:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout
|
|
30
|
+
uses: actions/checkout@v6
|
|
31
|
+
|
|
32
|
+
- name: Setup Node.js
|
|
33
|
+
uses: actions/setup-node@v6
|
|
34
|
+
with:
|
|
35
|
+
node-version: 22.x
|
|
36
|
+
|
|
37
|
+
- name: Audit AI context drift
|
|
38
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm.
|
|
39
|
+
run: npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --ci
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If you want JSON output as an artifact, use this variant:
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
- name: Audit AI context drift as JSON
|
|
46
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm.
|
|
47
|
+
run: npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --ci --json --output pluribus-audit.json
|
|
48
|
+
|
|
49
|
+
- name: Upload Pluribus audit result
|
|
50
|
+
if: always()
|
|
51
|
+
uses: actions/upload-artifact@v5
|
|
52
|
+
with:
|
|
53
|
+
name: pluribus-audit
|
|
54
|
+
path: pluribus-audit.json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Local repair loop
|
|
58
|
+
|
|
59
|
+
When CI fails:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx --yes pluribus-context@latest audit
|
|
63
|
+
npx --yes pluribus-context@latest sync --dry-run
|
|
64
|
+
npx --yes pluribus-context@latest sync
|
|
65
|
+
npx --yes pluribus-context@latest audit --strict
|
|
66
|
+
# In GitHub Actions with the tagged 0.3.3 CI flags, use:
|
|
67
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --ci
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Commit `pluribus.md` and the generated files together, or document that your team regenerates generated files during setup. Do not commit `.pluribus/cache/remote/`; commit `pluribus.lock.json` when you use remote imports.
|
|
71
|
+
|
|
72
|
+
## Remote imports in CI
|
|
73
|
+
|
|
74
|
+
Normal `audit`, `sync`, and `validate` runs do not fetch remote imports. They use the committed `pluribus.lock.json` plus the local cache. If CI fails because a remote import is unlocked or cache-missing, refresh it locally with:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npx --yes pluribus-context@latest sync --update-imports
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then review and commit the updated `pluribus.lock.json` with the generated outputs. Use `GH_TOKEN`/`GITHUB_TOKEN` only when refreshing private GitHub imports; Pluribus never writes tokens to the lockfile or cache.
|