pluribus-context 0.3.39 → 0.3.41

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 CHANGED
@@ -4,6 +4,15 @@
4
4
 
5
5
  All notable changes to Pluribus are documented here.
6
6
 
7
+ ## 0.3.41 - 2026-06-10
8
+
9
+ - Added npm Agent Skills discovery keywords (`agent-skill`, `skillpm`, and `agent-skills-registry`) so `pluribus-context` can be indexed by npm-backed skill package managers while continuing to ship the existing low-authority `skills/*/SKILL.md` recipes.
10
+
11
+ ## 0.3.40 - 2026-06-09
12
+
13
+ - Added `pluribus demo tool-surface-diff`, a tiny npm-runnable MCP dynamic-discovery receipt demo for proving discovered, activated, withheld, and blocked runtime tool-surface changes without logging raw schemas, prompts, or results.
14
+ - Expanded npm discovery keywords around MCP audit, gateways, security, tool discovery, and audit trails so the package is easier to find from the market lane now forming around MCP governance.
15
+
7
16
  ## 0.3.39 - 2026-06-07
8
17
 
9
18
  - Added `pluribus demo mcp-telemetry-import`, a tiny npm-runnable converter from MCP `rpc-messages.jsonl`-style JSON-RPC traces into privacy-safe audit receipts that preserve attribution, redacted shapes, status, and timing gaps without storing raw tool payloads.
package/README.md CHANGED
@@ -14,7 +14,7 @@ The original sync workflow is still useful: Pluribus can keep project instructio
14
14
 
15
15
  It is **not** a persistent memory layer, retrieval system, agent orchestrator, enterprise ContextOps platform, or agent-merging framework. Think evidence for context boundaries: `CLAUDE.md`, `.cursorrules`, `copilot-instructions.md`, `AGENTS.md`, MCP Tool Search, Agent Skills, RAG/code-search, pruning, and compaction — with privacy-safe receipts instead of raw content dumps.
16
16
 
17
- **Reviewer shortcut:** evaluating Pluribus for a list, newsletter, package roundup, or tool directory? Use the [Community Review Packet](docs/community-review-packet.md) for copy-paste directory submission fields, safety/removability notes, feedback links, and disposable 60-second smoke tests. If you only run one command for the cross-tool audit, try `npx --yes pluribus-context@latest audit --json --fidelity-report` to see native discovery surfaces, generic fallbacks, load evidence, duplicate-load selection evidence, manual activation requirements, effective context scope, and semantic differences. For the agent-observability wedge, start with [context-budget receipts](docs/context-budget-receipts.md): privacy-safe evidence for what MCP schemas, skills, memory, subagents, CLI help, retrieval chunks, pruning runs, or compaction summaries crossed an agent boundary. If you want the same idea as a copyable skill, use the [context-receipts Agent Skill recipe](skills/context-receipts/). npm `latest` is currently aligned with the GitHub release; the review packet also documents a GitHub-release smoke fallback for future release-lag windows.
17
+ **Reviewer shortcut:** evaluating Pluribus for a list, newsletter, package roundup, or tool directory? Use the [Community Review Packet](docs/community-review-packet.md) for copy-paste directory submission fields, safety/removability notes, feedback links, and disposable 60-second smoke tests. If you only run one command for the cross-tool audit, try `npx --yes pluribus-context@latest audit --json --fidelity-report` to see native discovery surfaces, generic fallbacks, load evidence, duplicate-load selection evidence, manual activation requirements, effective context scope, and semantic differences. For the agent-observability wedge, start with [context-budget receipts](docs/context-budget-receipts.md): privacy-safe evidence for what MCP schemas, skills, memory, subagents, CLI help, retrieval chunks, pruning runs, or compaction summaries crossed an agent boundary. It now explicitly covers the "Tool Search fixed MCP bloat" objection: the receipt proves which lane stayed deferred, which tool was expanded, and whether schemas leaked through `messages`/bootstrap anyway. For a 60-second runtime-discovery proof, run `npx --yes pluribus-context@latest demo tool-surface-diff --json`; it validates a receipt for discovered → activated → withheld/blocked MCP tools without raw schemas/prompts/results. If you are coming from Claude Code, GraphRAG, or memory tooling where retrieval succeeds but the agent ignores it, try the [context attention receipt example](examples/context-attention-receipts/) to prove required context was delivered, acknowledged, and cited before edits. If you want the same idea as a copyable skill, use the [context-receipts Agent Skill recipe](skills/context-receipts/). npm `latest` is currently aligned with the GitHub release; the review packet also documents a GitHub-release smoke fallback for future release-lag windows.
18
18
 
19
19
  ---
20
20
 
package/bin/pluribus.js CHANGED
@@ -94,6 +94,8 @@ EXAMPLES
94
94
  pluribus demo mcp-audit-receipt --json
95
95
  pluribus demo mcp-telemetry-import
96
96
  pluribus demo mcp-telemetry-import --json
97
+ pluribus demo tool-surface-diff
98
+ pluribus demo tool-surface-diff --json
97
99
 
98
100
  DOCS
99
101
  https://github.com/caioribeiroclw-pixel/pluribus
package/docs/.nojekyll ADDED
File without changes
@@ -0,0 +1,206 @@
1
+ ---
2
+ name: context-receipts
3
+ description: Emit privacy-safe receipts for context selection, deferral, hydration, compaction, pruning, delegation, usage attribution, and boundary handoffs.
4
+ ---
5
+
6
+ # Context Receipts
7
+
8
+ Use this skill when an agent workflow claims to save context by selecting, deferring, hydrating, summarizing, compacting, pruning, delegating, attributing usage, or isolating context.
9
+
10
+ The job is not to log the private content. The job is to emit a small receipt that lets a reviewer answer:
11
+
12
+ > what crossed the context boundary, what stayed out, and what audit gap remains?
13
+
14
+ ## Privacy defaults
15
+
16
+ Never include raw prompts, raw tool schemas, raw tool arguments, raw tool results, raw skill bodies, memory bodies, secrets, customer names, or full transcripts in the receipt.
17
+
18
+ Prefer:
19
+
20
+ - stable ids or hashed ids;
21
+ - counts and token/line buckets;
22
+ - categorical reasons;
23
+ - explicit booleans for raw content copied/not copied;
24
+ - before/after context budget buckets;
25
+ - an `audit_gap` field when the receipt proves routing but not semantic correctness.
26
+
27
+ ## 60-second Tool Search smoke
28
+
29
+ For MCP Tool Search, lazy tool loading, or progressive disclosure, emit enough evidence to answer these seven checks:
30
+
31
+ 1. **Index-only startup:** did the session load a compact tool/server index instead of all full schemas?
32
+ 2. **Search/routing:** what hashed query/category or routing reason selected candidate tools?
33
+ 3. **Hydration:** which full tool definition was loaded, why, and how many definitions stayed suppressed?
34
+ 4. **Call:** which server/tool id was invoked, with argument/result redaction status and success/error status?
35
+ 5. **Boundary:** if a manager subagent or child agent was used, did raw child output return to the parent?
36
+ 6. **Budget:** what were the startup and post-hydration context-token buckets?
37
+ 7. **Audit gap:** what is not proven, such as whether the selected tool was semantically optimal?
38
+
39
+ Minimal JSONL event names:
40
+
41
+ ```jsonl
42
+ {"event":"mcp.tool_index.loaded","loaded_server_count":12,"loaded_tool_index_count":84,"full_schema_count":0,"suppressed_tool_count":84,"raw_schema_copied":false,"startup_token_bucket":"lt_1k"}
43
+ {"event":"mcp.tool_search.performed","query_hash":"sha256:...","query_category":"repo_search","candidate_tool_count":5,"selected_tool_id":"github.search_code","raw_query_copied":false}
44
+ {"event":"mcp.tool_definition.loaded","tool_id":"github.search_code","hydrate_reason":"selected_after_tool_search","suppressed_tool_count":83,"definition_token_bucket":"1k_2k","raw_schema_copied":false}
45
+ {"event":"mcp.tool_call.completed","tool_id":"github.search_code","args_hash":"sha256:...","result_token_bucket":"2k_4k","raw_args_copied":false,"raw_result_copied":false,"status":"ok"}
46
+ ```
47
+
48
+ ## Skill / prompt context smoke
49
+
50
+ For skills, rules, AGENTS.md overlays, or instruction files, answer:
51
+
52
+ - which index/listing entered the session;
53
+ - which full skill/rule/instruction body was selected;
54
+ - which candidates were suppressed and why;
55
+ - whether the body was loaded at session start, after a search, or after an explicit command;
56
+ - source hash, delivered hash, and canonical form when available;
57
+ - whether the skill/instruction text was copied into the receipt.
58
+
59
+ Minimal event names:
60
+
61
+ - `context.skill.registry.index.loaded`
62
+ - `context.skill.registry.skill.read`
63
+ - `context.skill.registry.skill.injected`
64
+ - `context.input.loaded`
65
+ - `context.input.candidate_suppressed`
66
+
67
+ ## Per-agent MCP injection smoke
68
+
69
+ For role-specific subagents or per-agent MCP configs, prove the policy boundary before debugging model quality:
70
+
71
+ - which subagent role/session requested tools;
72
+ - which MCP servers were available to that role;
73
+ - which servers were explicitly excluded before boot;
74
+ - whether startup loaded full schemas or only a compact index;
75
+ - how many tool definitions stayed deferred/suppressed; and
76
+ - the startup token bucket after policy was applied.
77
+
78
+ Minimal JSONL event names:
79
+
80
+ ```jsonl
81
+ {"event":"subagent.mcp_policy.applied","subagent_role":"testing","available_server_count":2,"available_servers_hash":"sha256:...","excluded_server_count":5,"excluded_servers_hash":"sha256:...","policy_source":"role_config","raw_server_names_copied":false}
82
+ {"event":"subagent.context_boot.evaluated","subagent_role":"testing","loaded_tool_definition_count":0,"deferred_tool_definition_count":48,"startup_token_bucket":"50k_75k","raw_schema_copied":false,"audit_gap":"proves injection boundary, not tool relevance"}
83
+ ```
84
+
85
+ ## ToolSearch propagation smoke
86
+
87
+ For subagents that should inherit MCP through `ToolSearch`, distinguish policy, declaration, and runtime filtering:
88
+
89
+ - did the parent/orchestrator intend to expose MCP or exclude it for this subagent?
90
+ - was the subagent spawned immediately or after parent tool calls/orchestration work?
91
+ - was the `tools:` declaration wildcard, explicit include, or exclusion style?
92
+ - was `ToolSearch` declared and was it actually exposed in the subagent tool surface?
93
+ - did MCP servers/tool definitions stay deferred, or did the channel collapse to zero?
94
+ - was the agent registry loaded at session boot, making newly added agent files invisible until restart?
95
+
96
+ Minimal JSONL event names:
97
+
98
+ ```jsonl
99
+ {"event":"subagent.toolsearch.propagation.evaluated","spawn_path":"Task","tools_declaration_shape":"enumerated_include","toolsearch_declared":false,"toolsearch_exposed":false,"mcp_servers_available_bucket":"0","deferred_tool_definitions_bucket":"0","filtered_by":"frontmatter_tools_policy_or_runtime_filter","raw_tool_schemas_copied":false}
100
+ {"event":"subagent.toolsearch.matrix.completed","tested_axis":"tools_frontmatter_shape","audit_gap":"proves ToolSearch exposure, not semantic tool relevance or runtime call success"}
101
+ ```
102
+
103
+ ## Retrieval / code-search smoke
104
+
105
+ For semantic code search, repo RAG, or MCP tools such as Claude Context, separate "search returned" from "agent context loaded":
106
+
107
+ - which index snapshot/version was used, without raw local codebase paths;
108
+ - what query/category/filter identity selected the candidates, without raw query text;
109
+ - which result ids/chunk hashes were returned, with rank, score bucket, stale flag, duplicate marker, path hash/extension, and range bucket;
110
+ - which returned chunks were actually loaded into the agent context;
111
+ - which chunks were suppressed as duplicate, stale, clipped, policy-blocked, or over budget;
112
+ - whether raw code, raw prompts, raw paths, customer names, URLs, secrets, and ticket text stayed out of the receipt;
113
+ - the audit gap: this proves retrieval/loading boundaries, not semantic answer quality.
114
+
115
+ Minimal JSONL event names:
116
+
117
+ ```jsonl
118
+ {"event":"code.index.snapshot.used","snapshot_id_hash":"sha256:...","codebase_path_hash":"sha256:...","indexed_chunk_count_bucket":"over_1k","raw_codebase_path_copied":false}
119
+ {"event":"code.search.performed","query_hash":"sha256:...","query_category":"auth_debug","candidate_count_bucket":"over_1k","raw_query_copied":false}
120
+ {"event":"code.search.result.returned","rank":1,"chunk_id_hash":"sha256:...","chunk_text_hash":"sha256:...","path_hash":"sha256:...","score_bucket":"high","stale":false,"raw_code_copied":false}
121
+ {"event":"context.input.loaded","kind":"retrieved_code_chunks","loaded_chunk_count":3,"suppressed_chunk_count":2,"suppression_reasons":["duplicate","stale_snapshot_chunk"],"raw_code_copied":false}
122
+ ```
123
+
124
+ ## Usage attribution smoke
125
+
126
+ For `/usage`, `/context`, `/doctor`, or other context-budget breakdowns, map each displayed category to evidence that can be reviewed without exposing private content:
127
+
128
+ - what measurement window was used;
129
+ - which categories were attributed, such as skills, subagents, plugins, MCP servers, rules, memory, or project files;
130
+ - which components were loaded, deferred, hydrated, suppressed, pruned, or rolled back;
131
+ - before/after or current token/cost buckets by category;
132
+ - whether raw skill bodies, prompts, MCP schemas, tool outputs, and file paths were excluded;
133
+ - the remaining audit gap, such as not proving semantic usefulness of a high-cost component.
134
+
135
+ Minimal JSONL event names:
136
+
137
+ ```jsonl
138
+ {"event":"context.usage.window.measured","window":"current_session","total_token_bucket":"100k_150k","raw_prompts_copied":false}
139
+ {"event":"context.usage.category.attributed","category":"mcp_server","component_hash":"sha256:...","loaded_token_bucket":"10k_25k","deferred_definition_count":42,"hydrated_definition_count":3,"raw_schema_copied":false}
140
+ {"event":"context.usage.breakdown.completed","categories":["skills","subagents","plugins","mcp_server"],"audit_gap":"proves attribution buckets, not whether each component was necessary"}
141
+ ```
142
+
143
+ ## Pruning / compaction smoke
144
+
145
+ For context-cleaning, pruning, compaction, or doctor/guard tools, answer:
146
+
147
+ - what prescription/trigger started the run;
148
+ - which strategies changed context and which candidates were protected;
149
+ - before/after token and byte buckets;
150
+ - whether summaries, behavioral digests, team messages, and backups were preserved;
151
+ - whether private transcript text, raw tool output, file paths, secrets, and customer text were excluded from the receipt;
152
+ - the remaining audit gap, such as not proving semantic quality of the pruned text.
153
+
154
+ Minimal JSONL event names:
155
+
156
+ ```jsonl
157
+ {"event":"context.prune.started","prescription":"balanced","trigger":"manual_dry_run","before_token_bucket":"150k_200k","raw_transcript_copied":false}
158
+ {"event":"context.prune.strategy.evaluated","strategy":"tool-output-trim","candidate_bucket":"10_25","changed_bucket":"5_10","protected_bucket":"1_5","raw_tool_output_copied":false}
159
+ {"event":"context.prune.completed","after_token_bucket":"75k_100k","backup_verified":true,"protected_summary_count":2,"raw_text_copied":false,"audit_gap":"proves pruning/protection counts, not semantic disposability"}
160
+ ```
161
+
162
+ For failed compaction, also prove transaction safety:
163
+
164
+ - did the summary call succeed, fail, or timeout;
165
+ - was a candidate summary validated before any swap;
166
+ - did the harness commit a context swap or preserve the original context;
167
+ - were deferred-tool registries and system-reminder queues restored on rollback;
168
+ - did stale system reminders/tool results replay as fresh state;
169
+ - was post-token metadata recorded as success even though summary failed.
170
+
171
+ Minimal JSONL event names:
172
+
173
+ ```jsonl
174
+ {"event":"context.compaction.summary.attempted","summary_call_status":"failed_rate_limited","candidate_summary_available":false,"raw_error_copied":false}
175
+ {"event":"context.compaction.rollback.completed","swap_committed":false,"original_context_preserved":true,"deferred_tool_registry_restored":true,"system_reminder_queue_restored":true,"replayed_system_reminder_count":0}
176
+ {"event":"context.compaction.transaction.completed","status":"rolled_back","authoritative_state":"pre_compaction_context","post_tokens_recorded_as_success":false,"raw_context_copied":false}
177
+ ```
178
+
179
+ ## Subagent / manager boundary smoke
180
+
181
+ For subagents, manager agents, or child workers, answer:
182
+
183
+ - what task was delegated, by category and hashed objective;
184
+ - what large output was captured by the child, as line/token buckets;
185
+ - what bounded summary returned to the parent;
186
+ - whether raw child output, tool results, or MCP schemas entered the parent context;
187
+ - the remaining audit gap.
188
+
189
+ Minimal event names:
190
+
191
+ - `subagent.delegation.requested`
192
+ - `subagent.tool_output.captured`
193
+ - `subagent.summary.returned`
194
+ - `parent.context_budget.evaluated`
195
+
196
+ ## Good receipt test
197
+
198
+ A receipt is useful if a maintainer can debug one of these failures without seeing private content:
199
+
200
+ - the agent never found the right tool/skill;
201
+ - the full definition loaded too early;
202
+ - too many definitions stayed in context;
203
+ - a child/subagent saved no budget because raw output returned to the parent;
204
+ - compaction/pruning happened but no one can prove what was changed, protected, backed up, summarized, or dropped.
205
+
206
+ A receipt is not enough if it only says “Tool Search enabled” or “used subagent”. It must prove the boundary behavior.
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json",
3
+ "skills": [
4
+ {
5
+ "name": "context-receipts",
6
+ "type": "skill-md",
7
+ "description": "Emit privacy-safe receipts for context selection, deferral, hydration, compaction, pruning, delegation, usage attribution, and boundary handoffs.",
8
+ "url": "context-receipts/SKILL.md",
9
+ "digest": "sha256:6d268a5ceac4afa87308ff4c79f01483e2785a8e9bb54e5d3147477e0bf724a1"
10
+ },
11
+ {
12
+ "name": "skill-policy-receipts",
13
+ "type": "skill-md",
14
+ "description": "Use when a task must obey a hard project policy, such as \"do not generate tests for internal services\", \"do not call production APIs\", or \"do not edit generated files\". Emits a privacy-safe receipt before writes and after guard checks.",
15
+ "url": "skill-policy-receipts/SKILL.md",
16
+ "digest": "sha256:633b4da097b56da8805476a69d0498602979b7f8c03c57996f886bb9e56ccca8"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: skill-policy-receipts
3
+ description: Use when a task must obey a hard project policy, such as "do not generate tests for internal services", "do not call production APIs", or "do not edit generated files". Emits a privacy-safe receipt before writes and after guard checks.
4
+ ---
5
+
6
+ # Skill Policy Receipts
7
+
8
+ This Skill turns natural-language guardrails into an inspectable policy receipt.
9
+
10
+ ## Preflight: decide before writing
11
+
12
+ Before creating or editing files:
13
+
14
+ 1. List intended targets using coarse paths or globs.
15
+ 2. For each target, decide `allowed` or `refused`.
16
+ 3. Give a short reason.
17
+ 4. If any target is refused, stop before writing.
18
+ 5. Emit a receipt with `write_started=false` and `stopped_at="policy_refused"`.
19
+
20
+ Receipt shape:
21
+
22
+ ```json
23
+ {
24
+ "receipt_type": "skill.policy.v1",
25
+ "skill": "skill-policy-receipts",
26
+ "policy_scope": "<short policy name>",
27
+ "targets": [
28
+ {
29
+ "target": "<coarse path or glob>",
30
+ "decision": "allowed|refused",
31
+ "reason": "<short reason>"
32
+ }
33
+ ],
34
+ "write_started": false,
35
+ "post_write_guard": "not_run",
36
+ "stopped_at": "policy_refused|all_targets_allowed"
37
+ }
38
+ ```
39
+
40
+ Do not include raw prompts, code, secrets, customer data, stack traces, or full tool output.
41
+
42
+ ## Write only after all targets are allowed
43
+
44
+ If every target is allowed:
45
+
46
+ 1. Emit or state `stopped_at="all_targets_allowed"`.
47
+ 2. Perform the write.
48
+ 3. Run the configured post-write guard.
49
+ 4. Emit whether the guard passed or failed.
50
+
51
+ Post-write receipt shape:
52
+
53
+ ```json
54
+ {
55
+ "receipt_type": "skill.policy.v1",
56
+ "skill": "skill-policy-receipts",
57
+ "policy_scope": "<short policy name>",
58
+ "write_started": true,
59
+ "post_write_guard": "passed|failed|not_configured",
60
+ "stopped_at": "guard_passed|guard_failed"
61
+ }
62
+ ```
63
+
64
+ ## Example policy: no internal-service unit tests
65
+
66
+ Policy:
67
+
68
+ > Do not generate unit tests for internal services. If the requested test imports `internal/`, `@/internal`, or a known private service module, refuse before writing and explain the safer target.
69
+
70
+ Example guard:
71
+
72
+ ```bash
73
+ grep -R "from ['\"]\.\./\.\./internal\|from ['\"]@/internal\|require(['\"]@/internal" \
74
+ -- '*test.*' '*spec.*'
75
+ ```
76
+
77
+ If the grep finds a match in generated tests, stop and report `post_write_guard="failed"`.
@@ -8,6 +8,49 @@ This is different from generic token accounting. A context-budget receipt should
8
8
 
9
9
  If you want a copyable Agent Skill recipe instead of a spec-style guide, see [`skills/context-receipts/`](../skills/context-receipts/). It turns the receipt pattern into a 60-second smoke checklist for Tool Search, skills, and subagent boundaries.
10
10
 
11
+ ## If Tool Search already fixed the bloat
12
+
13
+ Modern hosts can defer large MCP catalogs behind Tool Search or similar lazy discovery. That changes the receipt question; it does not remove it.
14
+
15
+ Do not use a context-budget receipt to re-prove that every schema was smaller than before. Use it to prove the boundary that lazy loading promised:
16
+
17
+ - the catalog/index was loaded instead of full definitions;
18
+ - the selected query loaded only the matching tool definitions;
19
+ - unselected tool groups stayed deferred or withheld;
20
+ - a schema did not enter a side lane such as `messages`, subagent bootstrap, skill preamble, or memory hydration; and
21
+ - the receipt records what evidence is missing when only fallback client telemetry exists.
22
+
23
+ This makes the receipt useful in the common objection case: "MCP context bloat is solved by Tool Search." A good receipt should answer: **solved where, for this turn, through which lane, and with what proof?**
24
+
25
+ Runnable fixture for the normal happy path:
26
+
27
+ ```bash
28
+ node examples/context-input-evidence/convert-mcp-tool-search-log.mjs
29
+ ```
30
+
31
+ Public trace:
32
+
33
+ - `examples/context-input-evidence/mcp-tool-search-otel-trace.json`
34
+
35
+ Minimum hidden-bypass fields for managed seats or gateways:
36
+
37
+ ```json
38
+ {
39
+ "event.name": "mcp.deferral.evaluated",
40
+ "mcp.defer_loading.enabled": true,
41
+ "mcp.catalog.deferred": true,
42
+ "mcp.tool_search.selected_tool_count": 0,
43
+ "context.messages.remote_mcp_schema_count_bucket": "over_25",
44
+ "context.messages.delta_token_bucket": "under_100k",
45
+ "context.attribution": "remote_mcp_schema_in_messages",
46
+ "expected_behavior": "deferred_until_tool_search_match",
47
+ "verdict": "deferral_bypassed",
48
+ "privacy.raw_schema_included": false
49
+ }
50
+ ```
51
+
52
+ That shape deliberately avoids raw schema bodies, connector names, private URLs, and prompt text. It proves attribution, not whether the selected tool was semantically optimal.
53
+
11
54
  ## When to use this receipt
12
55
 
13
56
  Use a context-budget receipt when a coding agent looks lazy, fails with `prompt is too long`, or returns a tiny summary after a subagent/tool-heavy step and you need to distinguish:
@@ -0,0 +1,38 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Pluribus Context Receipts</title>
7
+ <style>
8
+ :root { color-scheme: dark light; --bg:#0b1020; --card:#121a33; --text:#e8ecf8; --muted:#aab4cf; --accent:#8ee6c4; --border:#283454; }
9
+ body { margin:0; font:16px/1.55 system-ui,-apple-system,Segoe UI,sans-serif; background:var(--bg); color:var(--text); }
10
+ main { max-width:880px; margin:0 auto; padding:56px 20px; }
11
+ a { color:var(--accent); }
12
+ .card { background:var(--card); border:1px solid var(--border); border-radius:18px; padding:24px; margin:20px 0; }
13
+ code { background:#060a15; padding:.15rem .35rem; border-radius:6px; }
14
+ </style>
15
+ </head>
16
+ <body>
17
+ <main>
18
+ <h1>Pluribus Context Receipts</h1>
19
+ <p>Privacy-safe evidence for AI context boundaries: what crossed into the agent, what stayed out, and what should stop before edits or tool calls.</p>
20
+ <div class="card">
21
+ <h2>Browser playground</h2>
22
+ <p>Try receipt validation without installing anything or sending data to a server. Current samples cover MCP tool-surface diffs, retrieved-context attention, and CLAUDE.md rule-attention drift.</p>
23
+ <p><a href="receipt-playground.html">Open the receipt playground →</a></p>
24
+ </div>
25
+ <div class="card">
26
+ <h2>CLI quick checks</h2>
27
+ <p><code>npx --yes pluribus-context@latest demo tool-surface-diff --json</code></p>
28
+ <p><code>npx --yes pluribus-context@latest validate</code></p>
29
+ </div>
30
+ <div class="card">
31
+ <h2>Agent Skills discovery</h2>
32
+ <p>Pluribus publishes a well-known Agent Skills index so compatible clients can discover the low-authority <code>context-receipts</code> and <code>skill-policy-receipts</code> skills without scraping GitHub.</p>
33
+ <p><a href=".well-known/agent-skills/index.json">Open <code>/.well-known/agent-skills/index.json</code> →</a></p>
34
+ </div>
35
+ <p><a href="https://github.com/caioribeiroclw-pixel/pluribus">GitHub repo</a> · <a href="https://www.npmjs.com/package/pluribus-context">npm package</a></p>
36
+ </main>
37
+ </body>
38
+ </html>