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
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Quickstart
|
|
2
|
+
|
|
3
|
+
Use this when you want to try Pluribus without touching a real project yet.
|
|
4
|
+
|
|
5
|
+
Pluribus takes one intentional context file (`pluribus.md`) and generates the tool-specific files your AI tools expect: `CLAUDE.md`, `.cursorrules`, Copilot instructions, `AGENTS.md`, Windsurf/Continue rules, and Zed `.rules`.
|
|
6
|
+
|
|
7
|
+
Already have one or more of those files? Start with a read-only inventory before replacing anything:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx --yes pluribus-context@latest audit
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Without `pluribus.md`, audit lists existing AI context surfaces so you can decide what to migrate. Then see [Migrate Existing AI Context Files](migrate-existing-context.md).
|
|
14
|
+
|
|
15
|
+
## What Pluribus writes
|
|
16
|
+
|
|
17
|
+
The safest path is audit → validate → `sync --dry-run` → `sync`. The first three steps are read-only. `init` writes only `pluribus.md`, and `sync` writes only generated AI context files for the tools you selected (`CLAUDE.md`, `.cursorrules`, Copilot instructions, `AGENTS.md`, Windsurf/Continue rules, or Zed `.rules`). Generated files include a `Generated by Pluribus ... do not edit manually` header, so direct edits show up as drift in `pluribus audit`.
|
|
18
|
+
|
|
19
|
+
Remote imports do not refresh silently; Pluribus writes `pluribus.lock.json` and `.pluribus/cache/remote/` only when you explicitly pass `--update-imports`.
|
|
20
|
+
|
|
21
|
+
## 1. Create a disposable demo project
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
mkdir pluribus-demo
|
|
25
|
+
cd pluribus-demo
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 2. Preview and scaffold context
|
|
29
|
+
|
|
30
|
+
Start read-only so you can see the template before writing a file. `init --dry-run` is prepared for `pluribus-context@0.3.3`; until that patch is published, use the GitHub tag install command for the preview:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus init --dry-run \
|
|
34
|
+
--name "Ana" \
|
|
35
|
+
--description "A Node.js service" \
|
|
36
|
+
--tools claude,cursor,copilot
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
When the scaffold looks right, create it from the published npm package:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx --yes pluribus-context@latest init \
|
|
43
|
+
--name "Ana" \
|
|
44
|
+
--description "A Node.js service" \
|
|
45
|
+
--tools claude,cursor,copilot
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This creates `pluribus.md`, the single source-of-truth file Pluribus reads. Open it and replace the scaffolded notes with real project context when you are ready. If you later need team/org reuse, keep the local project sections in `pluribus.md` and import shared Markdown with `# @import ./shared/team-context.md`.
|
|
49
|
+
|
|
50
|
+
Choose the comma-separated `--tools` list that matches your repo. The built-in adapters are:
|
|
51
|
+
|
|
52
|
+
| Tool id | Generated file |
|
|
53
|
+
| --- | --- |
|
|
54
|
+
| `claude` | `CLAUDE.md` |
|
|
55
|
+
| `cursor` | `.cursorrules` |
|
|
56
|
+
| `copilot` | `.github/copilot-instructions.md` |
|
|
57
|
+
| `openclaw` | `AGENTS.md` |
|
|
58
|
+
| `windsurf` | `.windsurf/rules/pluribus.md` |
|
|
59
|
+
| `continue` | `.continue/rules/pluribus.md` |
|
|
60
|
+
| `zed` | `.rules` |
|
|
61
|
+
|
|
62
|
+
You can also run `npx --yes pluribus-context@latest --help` to see the current supported tool ids from the CLI itself.
|
|
63
|
+
|
|
64
|
+
## 3. Validate before writing generated files
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx --yes pluribus-context@latest validate
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Validation checks for missing required sections, duplicate top-level sections, broken imports, and unsupported tool names.
|
|
71
|
+
|
|
72
|
+
## 4. Preview generated outputs
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx --yes pluribus-context@latest sync --dry-run
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
You should see previews for the selected tools. For the command above, Pluribus targets:
|
|
79
|
+
|
|
80
|
+
| Tool | Generated file |
|
|
81
|
+
| --- | --- |
|
|
82
|
+
| Claude Code | `CLAUDE.md` |
|
|
83
|
+
| Cursor | `.cursorrules` |
|
|
84
|
+
| GitHub Copilot | `.github/copilot-instructions.md` |
|
|
85
|
+
|
|
86
|
+
## 5. Audit before writing or in CI
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx --yes pluribus-context@latest audit
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Before generated files exist, audit reports them as missing. After sync, it becomes a read-only drift check. Use `--strict` in CI when you want missing or drifted generated files to fail the build.
|
|
93
|
+
|
|
94
|
+
## 6. Write the files when the preview looks right
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx --yes pluribus-context@latest sync
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Commit `pluribus.md` as the source of truth. Commit generated files if your team wants each tool to work immediately after clone; otherwise regenerate them in local setup/CI.
|
|
101
|
+
|
|
102
|
+
## 7. Keep files fresh while editing
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npx --yes pluribus-context@latest watch
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`watch` re-runs `sync` after edits to `pluribus.md` with a small debounce, so tool-specific files do not drift during normal work.
|
|
109
|
+
|
|
110
|
+
## Using shared or org-level context
|
|
111
|
+
|
|
112
|
+
For reusable team conventions, import shared Markdown before local project sections:
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
# @import ./shared/team-context.md
|
|
116
|
+
# @import ./shared/security-constraints.md
|
|
117
|
+
|
|
118
|
+
# Identity
|
|
119
|
+
I am Ana, building Conduit — a Node.js job runner.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Local sections apply after imports, so project-specific context can override shared context. See [Composable Contexts](composable-contexts.md) for local and remote import details.
|
|
123
|
+
|
|
124
|
+
## Common friction
|
|
125
|
+
|
|
126
|
+
- **`pluribus` command not found after `npx`:** use `npx --yes pluribus-context@latest ...` for one-off runs, or install globally with `npm install -g pluribus-context@latest` and then run `pluribus ...`.
|
|
127
|
+
- **Remote imports fail without `--update-imports`:** network refresh is explicit. Run `npx --yes pluribus-context@latest sync --update-imports` to refresh and pin remote content, then normal `sync` uses the lock/cache offline.
|
|
128
|
+
- **Private GitHub imports fail:** set `GH_TOKEN`/`GITHUB_TOKEN` or log in with `gh auth login`. Pluribus never writes tokens to `pluribus.lock.json` or cache files.
|
|
129
|
+
- **Generated files look wrong:** edit `pluribus.md`, run `validate`, then use `audit` and `sync --dry-run` before writing files.
|
|
130
|
+
|
|
131
|
+
## Feedback wanted
|
|
132
|
+
|
|
133
|
+
If the quickstart fails or the generated files do not match how your team actually uses AI tools, open a [quickstart feedback issue](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=quickstart-feedback.yml) with:
|
|
134
|
+
|
|
135
|
+
1. the command you ran;
|
|
136
|
+
2. which tool file felt wrong;
|
|
137
|
+
3. what you expected Pluribus to generate instead.
|
|
138
|
+
|
|
139
|
+
If the read-only audit was the confusing step, open an [audit feedback issue](https://github.com/caioribeiroclw-pixel/pluribus/issues/new?template=audit-feedback.yml) instead and summarize what it missed, flagged, or made unclear.
|
|
140
|
+
|
|
141
|
+
That feedback is more useful than generic feature requests because it shows where the context format or adapters are not matching real workflows.
|
|
@@ -17,13 +17,23 @@ This checklist keeps Pluribus releases reproducible and avoids accidentally publ
|
|
|
17
17
|
- Update `CHANGELOG.md` with user-facing changes, migration notes, and verification commands.
|
|
18
18
|
- Confirm README install commands use the package name `pluribus-context` and that the binary remains `pluribus`.
|
|
19
19
|
|
|
20
|
-
## 2. Local
|
|
20
|
+
## 2. Local release gate
|
|
21
21
|
|
|
22
|
-
Run from the repo root:
|
|
22
|
+
Run the consolidated release gate from the repo root:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
+
npm run release:verify
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The verifier requires a clean `main...origin/main` checkout, reports the local package version versus npm latest, classifies the npm auth state from `npm whoami` (logged in, missing auth, or invalid/stale token), smokes the currently published npm package when one exists, then runs `npm test`, `git diff --check`, `npm run release:smoke`, `npm pack --dry-run`, and `npm publish --dry-run`. If npm auth is missing or stale, the verifier still proves the package is technically ready and names the auth/2FA action left before publish.
|
|
29
|
+
|
|
30
|
+
If you need to debug an individual step, run it directly:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm run published:smoke
|
|
25
34
|
npm test
|
|
26
35
|
git diff --check
|
|
36
|
+
npm run release:smoke
|
|
27
37
|
npm pack --dry-run
|
|
28
38
|
npm publish --dry-run
|
|
29
39
|
```
|
|
@@ -47,30 +57,54 @@ Before publishing, install the exact tarball that `npm pack` creates into a temp
|
|
|
47
57
|
npm run release:smoke
|
|
48
58
|
```
|
|
49
59
|
|
|
50
|
-
The script packs the current checkout, installs that tarball into a temporary project, runs `pluribus --version`, `--help`, `init`, `validate`, `sync --dry-run`,
|
|
60
|
+
The script packs the current checkout, installs that tarball into a temporary project, runs `pluribus --version`, `--help`, `init`, `validate`, `audit`, `sync --dry-run`, a real `sync`, and `audit --strict`, then checks that generated output includes the package version from `package.json`. It also removes the temporary project and generated tarball on exit.
|
|
51
61
|
|
|
52
62
|
Expected results:
|
|
53
63
|
|
|
54
64
|
- `pluribus --version` matches `package.json`.
|
|
55
65
|
- `pluribus --help` shows the same version.
|
|
56
66
|
- generated files mention the same Pluribus version.
|
|
57
|
-
- `validate` and `sync --dry-run` work from the installed package, not the repo checkout.
|
|
67
|
+
- `validate`, `audit`, and `sync --dry-run` work from the installed package, not the repo checkout.
|
|
68
|
+
- `audit --strict` passes after generated files are written.
|
|
58
69
|
|
|
59
70
|
## 4. Publish
|
|
60
71
|
|
|
61
|
-
Only publish after npm auth is active and the dry run is clean:
|
|
72
|
+
Only publish after npm auth is active and the dry run is clean. If `npm run release:verify` reports an invalid/stale token, clear it with `npm logout` before logging in again or using a fresh temporary publish token; do not paste tokens into the repo, docs, logs, or shell history.
|
|
73
|
+
|
|
74
|
+
Use the guarded publish command so the same release gate runs immediately before publishing, then the published npm smoke runs immediately after:
|
|
62
75
|
|
|
63
76
|
```bash
|
|
64
|
-
npm publish
|
|
77
|
+
npm run release:publish
|
|
65
78
|
```
|
|
66
79
|
|
|
67
|
-
|
|
80
|
+
For a no-publish rehearsal, run:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm run release:publish -- --dry-run
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
This rehearsal runs the full release verifier and confirms `HEAD` matches the local Git tag `v<package.json version>` before the OTP window. Use it before asking for or entering a live OTP so tag drift is caught without touching npm.
|
|
87
|
+
|
|
88
|
+
If npm asks for OTP, use a short live OTP window and pass it through npm's normal `--otp` flag; do not paste tokens into the repo, docs, logs, or shell history. Avoid raw `_authToken`/token arguments — the guarded script refuses credential-like CLI arguments.
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npm run release:publish -- --otp <one-time-code>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
If a GitHub release or tag was created before npm publish succeeds, pause distribution. If `HEAD` still matches `v<package.json version>`, finish the npm publish with OTP/token and verify that npm `latest` matches the tagged version before posting publicly. If commits landed after the GitHub release/tag while npm was blocked, do **not** publish the same version from the newer commit. Reconcile first by publishing from the tagged commit, cutting a new patch version/tag, or intentionally updating the GitHub release/tag, then rerun the guarded publish.
|
|
95
|
+
|
|
96
|
+
Before any real npm publish, `release:publish` verifies that `HEAD` matches `v<package.json version>`; the dry-run rehearsal verifies the same alignment without publishing.
|
|
97
|
+
|
|
98
|
+
Then verify the registry entry and the install path users will see:
|
|
68
99
|
|
|
69
100
|
```bash
|
|
70
101
|
npm view pluribus-context version dist.tarball
|
|
71
|
-
npx pluribus-context
|
|
102
|
+
npm view pluribus-context readme | grep -E 'npx --yes pluribus-context|60-second smoke test|Published to npm'
|
|
103
|
+
npm run published:smoke
|
|
72
104
|
```
|
|
73
105
|
|
|
106
|
+
The npm README is captured at publish time. If the GitHub README changed after the previous publish, confirm the npm package page no longer contains stale pre-release markers such as `once published` before starting distribution.
|
|
107
|
+
|
|
74
108
|
## 5. GitHub release
|
|
75
109
|
|
|
76
110
|
After npm publish succeeds:
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# When to use Pluribus
|
|
2
|
+
|
|
3
|
+
Pluribus is for keeping intentional AI context in sync across tools.
|
|
4
|
+
|
|
5
|
+
Use it when you already have, or expect to have, more than one context surface for the same project:
|
|
6
|
+
|
|
7
|
+
- `CLAUDE.md` for Claude Code
|
|
8
|
+
- `.cursorrules` or `.cursor/rules/*.mdc` for Cursor
|
|
9
|
+
- `.github/copilot-instructions.md` for GitHub Copilot
|
|
10
|
+
- `AGENTS.md` for OpenClaw or Codex-style agents
|
|
11
|
+
- Windsurf, Continue, Zed, or other workspace rule files
|
|
12
|
+
|
|
13
|
+
The core bet is simple: if multiple AI tools need the same project facts, conventions, and constraints, those facts should be reviewed once and generated many times.
|
|
14
|
+
|
|
15
|
+
## Use Pluribus if
|
|
16
|
+
|
|
17
|
+
- You use two or more AI coding tools in the same repo.
|
|
18
|
+
- You maintain project conventions by copy-pasting between context files.
|
|
19
|
+
- You want context changes to be visible in git review.
|
|
20
|
+
- You want a dry-run before overwriting generated tool files.
|
|
21
|
+
- Your team has shared conventions that should apply across many repos.
|
|
22
|
+
- You want remote/shared context pinned with a lockfile before syncing.
|
|
23
|
+
|
|
24
|
+
## You may not need it if
|
|
25
|
+
|
|
26
|
+
- You only use one AI tool and one context file.
|
|
27
|
+
- Your context is entirely tool-specific and should not be shared.
|
|
28
|
+
- You need chat memory, retrieval, vector search, or agent orchestration.
|
|
29
|
+
- You want a one-time migration and do not plan to keep files synchronized.
|
|
30
|
+
|
|
31
|
+
## Pluribus vs rules sync tools
|
|
32
|
+
|
|
33
|
+
There are useful adjacent tools for applying or managing AI rules across editors and agents. If you are comparing packages such as Ruler, vibe-rules, or ai-rules-sync, start with the workflow you want rather than the package name.
|
|
34
|
+
|
|
35
|
+
Pluribus is a good fit when the source of truth should be reviewed as project context in git, regenerated into several tool-native files, and audited later for drift. It is less useful when you only need to push prompts into one tool's own rules format.
|
|
36
|
+
|
|
37
|
+
| Need | Better fit |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Apply the same simple rules to several coding agents with minimal ceremony | A rules sync tool may be enough |
|
|
40
|
+
| Manage Cursor/Windsurf prompt snippets without adopting a shared source file | A tool-native rules manager may be enough |
|
|
41
|
+
| Keep Claude, Cursor, Copilot, OpenClaw, Windsurf, Continue, Zed, and AGENTS-style context aligned over time | Pluribus |
|
|
42
|
+
| Review shared project context in PRs and regenerate generated files | Pluribus |
|
|
43
|
+
| Share org/team conventions across repos with pinned imports and a lockfile | Pluribus |
|
|
44
|
+
| Fail CI when generated context files drift from the reviewed source | Pluribus `audit --strict` |
|
|
45
|
+
|
|
46
|
+
## Pluribus vs one-way converters
|
|
47
|
+
|
|
48
|
+
A one-way converter is useful when you want to translate one tool's rule format into another tool's file once.
|
|
49
|
+
|
|
50
|
+
Pluribus is different: it treats `pluribus.md` as the source of truth and regenerates the tool files from that source whenever the context changes.
|
|
51
|
+
|
|
52
|
+
| Need | Better fit |
|
|
53
|
+
|---|---|
|
|
54
|
+
| Convert existing Cursor rules into `CLAUDE.md` once | One-way converter |
|
|
55
|
+
| Keep Claude, Cursor, Copilot, OpenClaw, Windsurf, Continue, and Zed context aligned over time | Pluribus |
|
|
56
|
+
| Preserve tool-specific metadata exactly as-is | Tool-native files or a converter |
|
|
57
|
+
| Review shared project context in PRs and regenerate generated files | Pluribus |
|
|
58
|
+
| Share org/team conventions across repos with pinned imports | Pluribus |
|
|
59
|
+
|
|
60
|
+
## Pluribus vs context linters and drift auditors
|
|
61
|
+
|
|
62
|
+
A context linter or drift auditor is useful when you want to inspect existing files and catch stale paths, dead commands, oversized instructions, risky content, or conflicting guidance.
|
|
63
|
+
|
|
64
|
+
Pluribus now includes a small read-only `pluribus audit` command, but its main job is not to be the deepest possible linter. Its main job is to prevent one specific class of drift: generated AI context files no longer matching the intentional source in `pluribus.md`.
|
|
65
|
+
|
|
66
|
+
Use both layers when they help:
|
|
67
|
+
|
|
68
|
+
| Need | Better fit |
|
|
69
|
+
|---|---|
|
|
70
|
+
| Find dead file references, stale commands, token bloat, or unsafe instructions inside context files | Dedicated context linter |
|
|
71
|
+
| Check whether `CLAUDE.md`, `.cursorrules`, Copilot instructions, and `AGENTS.md` match the same source of truth | `pluribus audit` |
|
|
72
|
+
| Auto-slim or rewrite arbitrary existing context files | Dedicated linter/fixer |
|
|
73
|
+
| Diagnose why a correct `CLAUDE.md` is ignored after compaction or summarization | Tool-specific runtime diagnostics/hooks |
|
|
74
|
+
| Generate aligned context files after review | `pluribus sync` |
|
|
75
|
+
| Enforce “generated files are up to date” in CI | `pluribus audit --strict` |
|
|
76
|
+
|
|
77
|
+
## Recommended migration path
|
|
78
|
+
|
|
79
|
+
1. Inventory your existing context files.
|
|
80
|
+
2. Move shared project facts and conventions into `pluribus.md`.
|
|
81
|
+
3. Keep genuinely tool-specific behavior in tool-native files or custom skills.
|
|
82
|
+
4. Run `pluribus sync --dry-run` and inspect the output.
|
|
83
|
+
5. Commit `pluribus.md`, generated files, and `pluribus.lock.json` if remote imports are used.
|
|
84
|
+
|
|
85
|
+
For the step-by-step version, see [Migrate Existing AI Context Files](migrate-existing-context.md).
|
|
86
|
+
|
|
87
|
+
## Mental model
|
|
88
|
+
|
|
89
|
+
Pluribus is not trying to make every AI tool identical.
|
|
90
|
+
|
|
91
|
+
It is trying to keep the stable, intentional parts of your project context from drifting while still letting each tool keep its own interface and strengths.
|
|
92
|
+
|
|
93
|
+
That means Pluribus handles file-level alignment. Runtime precedence problems — for example, a tool loading a compacted summary above a correct context file — are real, but they belong in the tool's load-order, hooks, or context-priority settings rather than in Pluribus' sync layer.
|
|
94
|
+
|
|
95
|
+
For a sharper split of the overloaded term "context drift", see the [Context Drift Taxonomy](context-drift-taxonomy.md).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Cursor Rules — generated by Pluribus 0.3.3 on 2026-05-13
|
|
2
|
+
# Source: pluribus.md
|
|
3
|
+
# Do not edit manually.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Project
|
|
7
|
+
I am Mina, maintaining **RelayKit** — a small TypeScript SDK for webhook delivery.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## Stack
|
|
12
|
+
- TypeScript 5.4
|
|
13
|
+
- Node.js 22 LTS
|
|
14
|
+
- Node's built-in test runner
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Conventions
|
|
18
|
+
- Prefer explicit return types for exported SDK functions
|
|
19
|
+
- Keep public API examples copy-pasteable
|
|
20
|
+
- Use small modules with clear error boundaries
|
|
21
|
+
|
|
22
|
+
## Goals
|
|
23
|
+
1. Keep webhook retries deterministic
|
|
24
|
+
2. Preserve backwards compatibility for public SDK APIs
|
|
25
|
+
3. Make production failure modes visible in logs and tests
|
|
26
|
+
|
|
27
|
+
## Constraints
|
|
28
|
+
- Do not add external queue infrastructure
|
|
29
|
+
- Do not break existing webhook payload shapes
|
|
30
|
+
- Do not hide delivery failures behind silent retries
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- Generated by Pluribus 0.3.3 on 2026-05-13 — do not edit manually -->
|
|
2
|
+
<!-- Source: pluribus.md -->
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## Project
|
|
6
|
+
I am Mina, maintaining **RelayKit** — a small TypeScript SDK for webhook delivery.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## Stack
|
|
10
|
+
- TypeScript 5.4
|
|
11
|
+
- Node.js 22 LTS
|
|
12
|
+
- Node's built-in test runner
|
|
13
|
+
|
|
14
|
+
## Conventions
|
|
15
|
+
- Prefer explicit return types for exported SDK functions
|
|
16
|
+
- Keep public API examples copy-pasteable
|
|
17
|
+
- Use small modules with clear error boundaries
|
|
18
|
+
|
|
19
|
+
## Constraints
|
|
20
|
+
- Do not add external queue infrastructure
|
|
21
|
+
- Do not break existing webhook payload shapes
|
|
22
|
+
- Do not hide delivery failures behind silent retries
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## Goals
|
|
26
|
+
1. Keep webhook retries deterministic
|
|
27
|
+
2. Preserve backwards compatibility for public SDK APIs
|
|
28
|
+
3. Make production failure modes visible in logs and tests
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!-- Generated by Pluribus 0.3.3 on 2026-05-13 — do not edit manually -->
|
|
2
|
+
<!-- Source: pluribus.md -->
|
|
3
|
+
|
|
4
|
+
# Project Context for Claude
|
|
5
|
+
|
|
6
|
+
## Identity
|
|
7
|
+
|
|
8
|
+
I am Mina, maintaining **RelayKit** — a small TypeScript SDK for webhook delivery.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Tech Stack
|
|
13
|
+
|
|
14
|
+
- TypeScript 5.4
|
|
15
|
+
- Node.js 20 LTS
|
|
16
|
+
- Node's built-in test runner
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Conventions
|
|
21
|
+
|
|
22
|
+
- Prefer explicit return types for exported SDK functions
|
|
23
|
+
- Keep public API examples copy-pasteable
|
|
24
|
+
- Use small modules with clear error boundaries
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Goals
|
|
29
|
+
|
|
30
|
+
1. Keep webhook retries deterministic
|
|
31
|
+
2. Preserve backwards compatibility for public SDK APIs
|
|
32
|
+
3. Make production failure modes visible in logs and tests
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Constraints
|
|
37
|
+
|
|
38
|
+
> These are non-negotiable. Do not deviate from these under any circumstances.
|
|
39
|
+
|
|
40
|
+
- Do not add external queue infrastructure
|
|
41
|
+
- Do not break existing webhook payload shapes
|
|
42
|
+
- Do not hide delivery failures behind silent retries
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Workflow
|
|
52
|
+
|
|
53
|
+
- Run `npm test` before committing
|
|
54
|
+
- Keep generated AI context files in sync with `pluribus.md`
|
|
55
|
+
- Review context changes like code changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Context drift audit example
|
|
2
|
+
|
|
3
|
+
This fixture shows the safest first Pluribus workflow for an existing repo: audit generated AI context before writing anything.
|
|
4
|
+
|
|
5
|
+
`pluribus.md` is the source of truth. `CLAUDE.md` is intentionally drifted: it says `Node.js 20 LTS` while `pluribus.md` says `Node.js 22 LTS`. Cursor and Copilot outputs are current.
|
|
6
|
+
|
|
7
|
+
Run from this directory:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx --yes --package ../.. pluribus audit --strict
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Expected result:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
⚠️ [claude] CLAUDE.md differs from generated output
|
|
17
|
+
✅ [cursor] .cursorrules is current
|
|
18
|
+
✅ [copilot] .github/copilot-instructions.md is current
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Preview the fix without writing files:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx --yes --package ../.. pluribus sync --dry-run
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Then apply it when the diff is acceptable:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx --yes --package ../.. pluribus sync
|
|
31
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!-- pluribus:tools: claude,cursor,copilot -->
|
|
2
|
+
|
|
3
|
+
# Identity
|
|
4
|
+
|
|
5
|
+
I am Mina, maintaining **RelayKit** — a small TypeScript SDK for webhook delivery.
|
|
6
|
+
|
|
7
|
+
# Stack
|
|
8
|
+
|
|
9
|
+
- TypeScript 5.4
|
|
10
|
+
- Node.js 22 LTS
|
|
11
|
+
- Node's built-in test runner
|
|
12
|
+
|
|
13
|
+
# Conventions
|
|
14
|
+
|
|
15
|
+
- Prefer explicit return types for exported SDK functions
|
|
16
|
+
- Keep public API examples copy-pasteable
|
|
17
|
+
- Use small modules with clear error boundaries
|
|
18
|
+
|
|
19
|
+
# Goals
|
|
20
|
+
|
|
21
|
+
1. Keep webhook retries deterministic
|
|
22
|
+
2. Preserve backwards compatibility for public SDK APIs
|
|
23
|
+
3. Make production failure modes visible in logs and tests
|
|
24
|
+
|
|
25
|
+
# Constraints
|
|
26
|
+
|
|
27
|
+
- Do not add external queue infrastructure
|
|
28
|
+
- Do not break existing webhook payload shapes
|
|
29
|
+
- Do not hide delivery failures behind silent retries
|
|
30
|
+
|
|
31
|
+
# Workflow
|
|
32
|
+
|
|
33
|
+
- Run `npm test` before committing
|
|
34
|
+
- Keep generated AI context files in sync with `pluribus.md`
|
|
35
|
+
- Review context changes like code changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
# Keep generated AI context files aligned with pluribus.md before committing.
|
|
5
|
+
# Install by copying this file to .git/hooks/pre-commit and running chmod +x.
|
|
6
|
+
|
|
7
|
+
if [ ! -f pluribus.md ]; then
|
|
8
|
+
exit 0
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
npx --yes pluribus-context@latest audit --strict
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Pluribus context audit
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
audit:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout
|
|
17
|
+
uses: actions/checkout@v6
|
|
18
|
+
|
|
19
|
+
- name: Setup Node.js
|
|
20
|
+
uses: actions/setup-node@v6
|
|
21
|
+
with:
|
|
22
|
+
node-version: 22.x
|
|
23
|
+
|
|
24
|
+
- name: Audit AI context drift
|
|
25
|
+
# Tagged v0.3.3 path until pluribus-context@0.3.3 is published to npm.
|
|
26
|
+
run: npx --yes --package github:caioribeiroclw-pixel/pluribus#v0.3.3 pluribus audit --ci
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pluribus-context",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.3",
|
|
4
|
+
"description": "Sync intentional AI context and rules across Claude Code, Cursor, Copilot, OpenClaw, Windsurf, Continue, and Zed.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/caioribeiroclw-pixel/pluribus#readme",
|
|
7
7
|
"repository": {
|
|
@@ -20,29 +20,44 @@
|
|
|
20
20
|
"src/",
|
|
21
21
|
"docs/",
|
|
22
22
|
"spec/",
|
|
23
|
+
"schemas/",
|
|
23
24
|
"examples/",
|
|
24
25
|
"CHANGELOG.md"
|
|
25
26
|
],
|
|
26
27
|
"scripts": {
|
|
27
28
|
"start": "node bin/pluribus.js",
|
|
28
29
|
"test": "node --test",
|
|
29
|
-
"release:smoke": "node scripts/release-smoke.js"
|
|
30
|
+
"release:smoke": "node scripts/release-smoke.js",
|
|
31
|
+
"published:smoke": "node scripts/published-smoke.js",
|
|
32
|
+
"release:verify": "node scripts/release-verify.js",
|
|
33
|
+
"release:publish": "node scripts/release-publish.js"
|
|
30
34
|
},
|
|
31
35
|
"keywords": [
|
|
36
|
+
"agent-rules",
|
|
37
|
+
"agents",
|
|
38
|
+
"agents-md",
|
|
32
39
|
"ai",
|
|
33
|
-
"
|
|
34
|
-
"context",
|
|
35
|
-
"context-engineering",
|
|
40
|
+
"ai-coding-agents",
|
|
41
|
+
"ai-context",
|
|
36
42
|
"ai-tools",
|
|
43
|
+
"aider",
|
|
37
44
|
"claude",
|
|
38
45
|
"claude-code",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
46
|
+
"cli",
|
|
47
|
+
"codex",
|
|
48
|
+
"context",
|
|
49
|
+
"context-drift",
|
|
50
|
+
"context-engineering",
|
|
42
51
|
"continue",
|
|
43
|
-
"
|
|
52
|
+
"copilot",
|
|
53
|
+
"cursor",
|
|
54
|
+
"cursor-rules",
|
|
55
|
+
"developer-tools",
|
|
56
|
+
"drift-detection",
|
|
44
57
|
"openclaw",
|
|
45
|
-
"
|
|
58
|
+
"rules",
|
|
59
|
+
"windsurf",
|
|
60
|
+
"zed"
|
|
46
61
|
],
|
|
47
62
|
"author": "Caio Ribeiro",
|
|
48
63
|
"license": "MIT",
|