inspectrum
Advanced tools
| # Codex plugin: review a plan with Claude | ||
| This repository contains a Codex plugin named `inspectrum`. It adds one | ||
| workflow: send the current Codex development plan to Claude through | ||
| Inspectrum's existing `review_plan` MCP tool. | ||
| The plugin does not add a tool or change the server architecture. Its bundled | ||
| MCP configuration starts the candidate package with: | ||
| ```text | ||
| npx -y inspectrum@0.2.2 | ||
| ``` | ||
| The package selector must match `package.json`; the contract test fails if the | ||
| two versions drift. | ||
| ## Public installation | ||
| The public installation smoke test is currently **blocked**. npm and the public | ||
| GitHub release still expose `0.2.1`, while this plugin belongs to the `0.2.2` | ||
| candidate. Do not install the older public package as a silent fallback. | ||
| After `0.2.2` is published to npm and this marketplace is merged into `main`, | ||
| verify the exact package first: | ||
| ```bash | ||
| npm view inspectrum@0.2.2 version | ||
| npx -y inspectrum@0.2.2 doctor | ||
| ``` | ||
| Both commands must resolve `0.2.2`. Then install the repository marketplace | ||
| and plugin: | ||
| ```bash | ||
| codex plugin marketplace add yannmenec/inspectrum --ref main | ||
| codex plugin add inspectrum@inspectrum | ||
| ``` | ||
| Restart Codex and use a new task so the skill and MCP server are loaded. Ask: | ||
| ```text | ||
| Review this plan with Claude using Inspectrum. | ||
| ``` | ||
| ## Validation before publication | ||
| Before the npm package exists, validate the local candidate rather than | ||
| claiming a public end-to-end success: | ||
| ```bash | ||
| npm ci | ||
| npm run build | ||
| npx tsc --noEmit | ||
| npx eslint src/ | ||
| npm run test:coverage | ||
| npm test -- tests/contract/codex-plugin.contract.test.ts | ||
| ``` | ||
| The repository build and tests run the local `0.2.2` source. The targeted | ||
| contract validates the Codex manifest, marketplace entry, pinned MCP package, | ||
| reviewer direction, and failure semantics. The committed plugin launcher | ||
| itself cannot complete its public npm smoke test until `inspectrum@0.2.2` is | ||
| published. | ||
| ## Failure and privacy | ||
| The skill always calls `review_plan` with `reviewers: ["claude"]` and | ||
| `judge: false`. If Claude is missing, unauthenticated, or fails, the MCP result | ||
| is an error with no successful structured review. The skill reports that the | ||
| Claude review did not complete; it must not turn that failure into an approval. | ||
| The full plan is sent to Claude. Successful reviews are stored as plaintext | ||
| under `~/.inspectrum/sessions/`. Remove secrets from the plan before requesting | ||
| a review. |
| # Inspectrum 0.2.2 submission kit | ||
| Status: candidate only, prepared on 2026-07-30. **Do not submit** to any | ||
| external channel until every hard gate below is checked. | ||
| Technical identifiers stay lowercase where registries require them: | ||
| `inspectrum` for npm and Claude namespacing, and | ||
| `io.github.yannmenec/inspectrum` for the MCP Registry. The public product name | ||
| is exactly **Inspectrum**. | ||
| ## Reusable listing copy | ||
| **Name:** Inspectrum | ||
| **Short description:** Review coding-agent plans on demand with peer models, | ||
| attributed findings, and a structured verdict. | ||
| **Long description:** | ||
| Inspectrum adds a second model's review before a coding plan reaches execution. | ||
| Its Claude Code plugin can run a bounded Codex review when plan mode exits; its | ||
| local MCP server exposes `review_plan` to hosts that support local | ||
| standard-input/output MCP. Findings retain reviewer attribution and the user | ||
| keeps final approval. | ||
| Inspectrum runs locally, has no first-party telemetry, and stores successful | ||
| session evidence as plain Markdown under `~/.inspectrum/sessions/`. Plans and | ||
| optional context are sent to the reviewer command-line tools or endpoints the | ||
| user configures. Operational failures in the Claude plan gate pass the plan | ||
| through with a visible warning. | ||
| For occasional review, a skill or manual handoff can be enough. Inspectrum | ||
| packages the repeatable path: orchestration, output validation, health checks, | ||
| bounded failure behavior, and a local session record. | ||
| **Claude Community:** `A repeatable second-model checkpoint for Claude Code | ||
| plans: automatic at the plan boundary, bounded, fail-open, evidence-backed, and | ||
| always leaves final approval to you.` | ||
| **MCP directories:** `Turn ad-hoc second opinions into a repeatable plan-review | ||
| checkpoint. One local MCP tool returns attributed findings and one structured | ||
| verdict on demand.` | ||
| **Primary category:** Developer Tools | ||
| **Secondary categories:** Code Analysis; Coding Agents; Testing and Quality | ||
| **Keywords:** plan review, Claude Code, Codex, MCP, coding agent, multi-model, | ||
| human approval | ||
| **Install:** | ||
| ```bash | ||
| npx -y inspectrum@0.2.2 doctor | ||
| ``` | ||
| **Public URLs after release:** | ||
| - Source: https://github.com/yannmenec/inspectrum | ||
| - Package: https://www.npmjs.com/package/inspectrum/v/0.2.2 | ||
| - Release: https://github.com/yannmenec/inspectrum/releases/tag/v0.2.2 | ||
| - Documentation: https://github.com/yannmenec/inspectrum#readme | ||
| - Privacy: https://github.com/yannmenec/inspectrum/blob/main/PRIVACY.md | ||
| - Terms/license: https://github.com/yannmenec/inspectrum/blob/main/LICENSE | ||
| - Security: https://github.com/yannmenec/inspectrum/security/policy | ||
| - Support: https://github.com/yannmenec/inspectrum/issues | ||
| - Icon: https://raw.githubusercontent.com/yannmenec/inspectrum/main/assets/brand/inspectrum-icon.png | ||
| - Preview: https://raw.githubusercontent.com/yannmenec/inspectrum/main/assets/brand/social-preview.png | ||
| ## Captures and visual assets | ||
| The OpenAI Plugin Directory requires a production-ready logo. The other | ||
| channels may expose optional media fields; none of the reviewed submission | ||
| guides requires a screenshot. | ||
| | Asset | Status | Use | | ||
| |---|---|---| | ||
| | `assets/brand/inspectrum-icon.png` (512x512) | Ready | Required for the OpenAI Plugin Directory; optional elsewhere | | ||
| | `assets/brand/social-preview.png` (1280x640) | Ready | Optional wide preview | | ||
| | `assets/brand/terminal-doctor.png` (1280x720) | Blocked | Real 0.2.1 evidence; never present it as 0.2.2 | | ||
| Replace the terminal capture only after installing public `inspectrum@0.2.2` in | ||
| an empty temporary environment and obtaining a green release-candidate | ||
| validation. Preserve the transcript; update hashes and provenance in | ||
| `assets/brand/README.md`; exclude credentials, real home paths, tokens, and | ||
| private plan content. | ||
| ## Hard gates before any external submission | ||
| - [ ] The release-candidate report explicitly marks its required build, type, | ||
| lint, test, coverage, package, bundle, and real-review proofs green. | ||
| Record its commit and evidence URL in the release record. | ||
| - [ ] `inspectrum@0.2.2` is publicly retrievable from npm. | ||
| - [ ] GitHub release `v0.2.2` is public, not a draft or prerelease, and contains | ||
| `inspectrum-0.2.2.mcpb`. | ||
| - [ ] `main` publicly contains the 0.2.2 `package.json`, `server.json`, Claude | ||
| plugin manifests, Codex Git marketplace, privacy notice, documentation, | ||
| and optional brand assets. | ||
| - [ ] `npm audit --omit=dev` has no high-severity production finding for the | ||
| exact lockfile used to build the Claude Desktop bundle. | ||
| - [ ] `npm run check:submission -- --public` exits successfully. | ||
| - [ ] A fresh public install returns `0.2.2`, exposes exactly `review_plan`, and | ||
| passes `doctor` without leaking secrets. | ||
| The local-only check is safe before release: | ||
| ```bash | ||
| npm run check:submission | ||
| claude plugin validate . --strict | ||
| mcp-publisher validate server.json | ||
| ``` | ||
| Use the official `validate` subcommand for this local check. Do not authenticate | ||
| or invoke `publish` until every hard gate below passes. | ||
| ## Channel 1 — MCP Registry | ||
| The registry requires a valid `server.json`, a public install artifact, matching | ||
| `package.json.mcpName` and `server.json.name`, aligned versions, and namespace | ||
| authentication. Prepared values are `io.github.yannmenec/inspectrum`, | ||
| `Inspectrum`, `inspectrum@0.2.2`, `stdio`, authenticated by GitHub owner | ||
| `yannmenec`. Local standard-input/output servers are supported; no HTTPS server | ||
| is needed. The registry remains in preview. | ||
| After all hard gates pass, an authorized operator may run: | ||
| ```bash | ||
| mcp-publisher login github | ||
| mcp-publisher validate server.json | ||
| mcp-publisher publish server.json | ||
| npm run check:submission -- --registry | ||
| ``` | ||
| - https://modelcontextprotocol.io/registry/about | ||
| - https://modelcontextprotocol.io/registry/quickstart | ||
| - https://registry.modelcontextprotocol.io/docs | ||
| - https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json | ||
| ## Channel 2 — Codex Git marketplace | ||
| The repository already contains a Codex marketplace entry under | ||
| `.agents/plugins/` and a validated plugin under `plugins/inspectrum/`. This makes | ||
| Inspectrum directly installable from its GitHub repository after 0.2.2 is public; | ||
| it does not by itself create a listing in OpenAI's curated Plugin Directory. | ||
| After all hard gates pass: | ||
| ```bash | ||
| codex plugin marketplace add yannmenec/inspectrum --ref main | ||
| codex plugin add inspectrum@inspectrum | ||
| codex plugin list | ||
| ``` | ||
| Start a new Codex task, ask `Review this plan with Claude using Inspectrum`, and | ||
| verify that the review is successful and attributed to Claude, returns a | ||
| structured verdict, and includes a local session path. | ||
| - https://help.openai.com/en/articles/20001256-plugins-in-codex | ||
| ## Channel 3 — OpenAI Plugin Directory | ||
| OpenAI's public portal accepts skills-only, MCP-only, and combined submissions. | ||
| Inspectrum's complete Git plugin cannot currently use **With MCP** because that | ||
| route requires a public production MCP URL, while Inspectrum intentionally uses | ||
| local standard input/output. Changing that transport requires a separate | ||
| architecture decision. | ||
| The viable central-directory route is **Skills only**, after creating and | ||
| testing a standalone skill bundle that does not silently depend on the Git | ||
| plugin's bundled local MCP configuration. This is a follow-up deliverable, not a | ||
| claim that the current package is submission-ready. | ||
| Before submission: | ||
| 1. Give the submitter `Apps Management: Write` and verify the individual or | ||
| business publisher identity on the OpenAI Platform. | ||
| 2. Prepare the standalone skill bundle, starter prompts, five positive tests, | ||
| and three negative tests. | ||
| 3. Reuse the Inspectrum name, icon, descriptions, website, support, privacy, | ||
| and license URLs above. | ||
| 4. Choose **Skills only**, complete the policy attestations, submit for review, | ||
| and publish only after approval. | ||
| - https://developers.openai.com/plugins/deploy/submission | ||
| - https://platform.openai.com/plugins | ||
| ## Channel 4 — Claude Community | ||
| The target is `claude-community`; `claude-plugins-official` is curated separately | ||
| without an application process. Community submissions run | ||
| `claude plugin validate` and automated safety screening, then pin approved | ||
| plugins to a commit hash. | ||
| Prepared form copy: | ||
| - Display name: `Inspectrum` | ||
| - Technical plugin name: `inspectrum` | ||
| - Source repository: https://github.com/yannmenec/inspectrum | ||
| - Plugin path: repository root | ||
| - Description: `A repeatable second-model checkpoint for Claude Code plans: | ||
| automatic at the plan boundary, bounded, fail-open, evidence-backed, and | ||
| always leaves final approval to you.` | ||
| - Privacy summary: `No first-party telemetry. Plans are sent to user-configured | ||
| reviewer tools or endpoints and successful sessions are stored locally as | ||
| plaintext Markdown.` | ||
| Rerun `claude plugin validate . --strict`, then use the individual-author form: | ||
| https://platform.claude.com/plugins/submit. The Claude.ai form requires a Team or | ||
| Enterprise organization plus directory-management access: | ||
| https://claude.ai/admin-settings/directory/submissions/plugins/new. | ||
| - https://code.claude.com/docs/en/plugins | ||
| - https://code.claude.com/docs/en/plugins-reference | ||
| - https://code.claude.com/docs/en/plugin-marketplaces | ||
| - https://github.com/anthropics/claude-plugins-community | ||
| ## Channel 5 — Glama | ||
| Glama verifies GitHub write or administrator access, then builds, runs, and | ||
| introspects the server in a sandbox; a failed reproducible build is not | ||
| discoverable. It also ingests the official MCP Registry. | ||
| 1. Publish to the MCP Registry. | ||
| 2. Search https://glama.ai/mcp/servers for `Inspectrum` and | ||
| `io.github.yannmenec/inspectrum`. | ||
| 3. If no listing appears, use **Add Server** with | ||
| https://github.com/yannmenec/inspectrum while signed in as a repository | ||
| maintainer. Do not opt into Glama hosting or create an HTTPS endpoint. | ||
| 4. If a summary field is available, use the **MCP directories** copy above. | ||
| 5. Verify the listing reports one tool, `review_plan`, and the intended local | ||
| standard-input/output install command. | ||
| - https://glama.ai/ | ||
| - https://glama.ai/mcp/servers | ||
| - https://glama.ai/mcp/methodology | ||
| ## Channel 6 — PulseMCP | ||
| The server flow at https://www.pulsemcp.com/submit directs maintainers to the | ||
| official registry. PulseMCP says it ingests daily, processes weekly, and accepts | ||
| email corrections at `hello@pulsemcp.com` after one week. | ||
| 1. Publish to the MCP Registry. | ||
| 2. Wait up to one week, then search https://www.pulsemcp.com/servers for | ||
| `Inspectrum` and the registry name. | ||
| 3. If still missing or incorrect, email the source URL, registry name, expected | ||
| title, **MCP directories** copy above, and affected field. Exclude | ||
| credentials and private evidence. | ||
| - https://www.pulsemcp.com/submit | ||
| - https://www.pulsemcp.com/servers | ||
| - https://www.pulsemcp.com/api | ||
| ## Evidence to retain after submission | ||
| - MCP Registry: publisher output and the exact API result for version 0.2.2. | ||
| - Codex Git marketplace: configured source, installed plugin version, successful | ||
| Claude review, and sanitized session identifier. | ||
| - OpenAI Plugin Directory: submitted skill-bundle hash, test-case set, review | ||
| status, approval, publication date, and public listing URL. | ||
| - Claude Community: submission receipt, reviewed commit hash, catalog URL, and | ||
| a clean install from `@claude-community`. | ||
| - Glama: public listing URL, scan time, reproduced tool count, and any findings. | ||
| - PulseMCP: public listing URL and first-seen date; email only if still missing | ||
| after the stated week. | ||
| Never record authentication codes, cookies, access tokens, private reviewer | ||
| outputs, or unsanitized local paths. |
+69
| # Privacy and data flow | ||
| Inspectrum runs locally. It has no hosted Inspectrum service and no first-party telemetry. It does, however, send plan content to the reviewer CLIs or HTTP endpoints you configure and writes plaintext evidence to your filesystem. | ||
| This document describes Inspectrum `0.2.2`. Provider and CLI behavior can change independently. | ||
| ## Data you provide | ||
| The `review_plan` tool accepts: | ||
| - the full plan, up to 16,000 characters; | ||
| - optional codebase context, up to 8,000 characters; | ||
| - reviewer IDs, focus and judge settings. | ||
| Do not include passwords, tokens, private keys, personal data or other secrets. Truncation limits reduce size; they do not redact content. | ||
| ## Where the data goes | ||
| Every active reviewer receives the plan and optional context in its prompt. If at least two reviewers succeed and `judge=true`, the configured judge receives the plan plus those reviewer outputs. | ||
| | Adapter | Destination and control boundary | | ||
| |---|---| | ||
| | Codex CLI | The locally installed Codex CLI and the OpenAI account or API configuration behind it. See [OpenAI's privacy policy](https://openai.com/policies/privacy-policy/). | | ||
| | Claude CLI | The locally installed Claude CLI and the Anthropic account or API configuration behind it. See [Anthropic's privacy policy](https://www.anthropic.com/legal/privacy). | | ||
| | Gemini CLI | The locally installed Gemini CLI and the Google account or API configuration behind it. See [Google's privacy policy](https://policies.google.com/privacy). | | ||
| | OpenRouter HTTP | The endpoint and credentials in your Inspectrum configuration. See [OpenRouter's privacy policy](https://openrouter.ai/privacy). | | ||
| | Ollama HTTP | The endpoint in your configuration. It is local only when that endpoint and its model are operated locally; Inspectrum does not prove zero egress. | | ||
| | Experimental Kimi/Qwen CLI adapters | Routing, retention and credentials depend on the binary and configuration you install. Inspect that software before use; Inspectrum does not assert a fixed provider route. | | ||
| Provider terms, training controls, retention, regional processing, quotas and billing are outside Inspectrum's control. | ||
| ## Local processes and permissions | ||
| Reviewer CLIs run as child processes under your user account and inherit the process environment. They can therefore see environment variables made available to them. Their filesystem and network capabilities depend on the CLI, account and local configuration. | ||
| For Codex reviews, Inspectrum enforces `codex exec --ephemeral --skip-git-repo-check -s read-only` in a temporary working directory and strips sandbox-weakening, cwd-override and output-path flags supplied through reviewer arguments. This limits project writes by that invocation; it does not make the provider call local or prevent Inspectrum from writing its own evidence. | ||
| Claude, Gemini and experimental CLI adapters do not receive the same Codex-specific sandbox enforcement. Review their permissions separately. | ||
| ## Files written locally | ||
| Successful reviews create a directory under: | ||
| ```text | ||
| ~/.inspectrum/sessions/<timestamp>__<session-id>/ | ||
| ``` | ||
| It can contain the original plan, report, structured session metadata, one file per successful reviewer, an optional judge output and an optional revised plan. The MCP response also returns the local session path. | ||
| The Claude Code gate stores plan hashes, denial counters and cached denial reasons under `~/.inspectrum/state/`. It does not use those files as product telemetry. | ||
| On POSIX systems, Inspectrum creates and repairs session/state directories to mode `0700`, and gate state files are written with mode `0600`. The content is still plaintext, not encrypted. File modes, backups, sync tools, copied files and non-POSIX platforms can change who can read it. Treat `~/.inspectrum/` as sensitive local data. | ||
| Inspectrum applies no automatic retention period. Delete individual session directories or the entire local history with your operating system's file manager when you no longer need them. A provider may retain its own copy under its separate policy. | ||
| ## Network behavior | ||
| Inspectrum itself has no analytics or update beacon. Network traffic occurs when a configured cloud reviewer CLI or HTTP adapter performs a review. `doctor` may invoke installed CLI status/version commands but does not send plan content. | ||
| ## User controls | ||
| - Disable the automatic gate with `[plan_gate] enabled = false` in `~/.inspectrum/config.toml` or disable the plugin. | ||
| - Choose only reviewers and endpoints whose policies fit the plan's sensitivity. | ||
| - Use synthetic or redacted context when full repository context is unnecessary. | ||
| - Keep the human approval step; reviewer output can be inaccurate or manipulated by untrusted plan text. | ||
| ## Support and security | ||
| Use [GitHub Issues](https://github.com/yannmenec/inspectrum/issues) for non-sensitive support. Follow the repository [security policy](https://github.com/yannmenec/inspectrum/blob/main/SECURITY.md) for private vulnerability reporting. Never attach credentials or an unredacted private plan. |
+24
| { | ||
| "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", | ||
| "name": "io.github.yannmenec/inspectrum", | ||
| "title": "Inspectrum", | ||
| "description": "Review coding-agent plans on demand with peer models, attributed findings, and a structured verdict.", | ||
| "repository": { | ||
| "url": "https://github.com/yannmenec/inspectrum", | ||
| "source": "github", | ||
| "id": "1242227459" | ||
| }, | ||
| "version": "0.2.2", | ||
| "websiteUrl": "https://github.com/yannmenec/inspectrum/blob/main/docs/claude-code-codex-plan-review.md", | ||
| "packages": [ | ||
| { | ||
| "registryType": "npm", | ||
| "registryBaseUrl": "https://registry.npmjs.org", | ||
| "identifier": "inspectrum", | ||
| "version": "0.2.2", | ||
| "transport": { | ||
| "type": "stdio" | ||
| } | ||
| } | ||
| ] | ||
| } |
+30
-12
@@ -40,4 +40,5 @@ # Contributing to inspectrum | ||
| inspectrum is published to npm as a public unscoped package. The owner | ||
| runs the publish steps; CI and `prepack` are the safety nets. | ||
| inspectrum is published to npm as a public unscoped package. Release | ||
| automation builds reviewable artifacts and stages an npm candidate; a | ||
| separate human approval with 2FA is required before public availability. | ||
@@ -54,7 +55,15 @@ ### Pre-release checks (always run) | ||
| npm pack --dry-run --json # tarball entry list looks right | ||
| npm view inspectrum name version --json # confirm the name is still available | ||
| npm run build:mcpb # build the versioned Claude Desktop bundle | ||
| npm run verify:mcpb # schema, contents, dependencies, MCP smoke | ||
| npm view inspectrum version --json # record the current public version | ||
| ``` | ||
| ### Tagging + publishing | ||
| ### Tagging, draft release, and npm staging | ||
| Only continue after the exact remote actions have received separate explicit | ||
| authorization. The tag push triggers `.github/workflows/release.yml`; it builds | ||
| without write credentials, then a small write-scoped job creates or updates a | ||
| draft GitHub release with the verified MCPB. It does not make an npm version | ||
| public. | ||
| ```bash | ||
@@ -64,6 +73,16 @@ git checkout main && git pull --ff-only | ||
| git tag -a "v$VERSION" -m "v$VERSION" | ||
| git push origin main --tags | ||
| npm publish --access public | ||
| git push origin "v$VERSION" | ||
| gh workflow run npm-stage.yml --ref "v$VERSION" -f tag="v$VERSION" | ||
| ``` | ||
| The `npm` environment must allow only selected tags matching `v*` and require | ||
| maintainer review; the workflow separately rejects anything except stable | ||
| `vMAJOR.MINOR.PATCH`. A repository ruleset should independently prevent release | ||
| tags from being moved or deleted. npm trusted publishing must match repository | ||
| `yannmenec/inspectrum`, workflow `npm-stage.yml`, environment `npm`, and the | ||
| stage-only action. The workflow validates and stages the exact tarball; it does | ||
| not approve the staged version. Making the staged version public requires a | ||
| separate explicit authorization and 2FA review. Never infer that authorization | ||
| from a merged PR, pushed tag, draft release, or successful staging run. | ||
| ### Post-publish smoke (60 s) | ||
@@ -80,9 +99,8 @@ | ||
| ### Why `npm publish --dry-run` is not a safety net | ||
| ### Why a dry run is not a publication safety net | ||
| npm 11's `--dry-run` prints "would publish" output regardless of whether | ||
| the real call would have succeeded or failed (and it never makes network | ||
| calls). Treat the flag as documentation of what *would* ship, not as a | ||
| gate. The actual safety nets are `prepack`, the `files` allowlist, and | ||
| manual review of `npm pack --dry-run --json` output before tagging. | ||
| npm's dry-run output documents what would ship but does not prove that a | ||
| registry mutation would succeed. The safety nets are `prepack`, the `files` | ||
| allowlist, exact-tarball smoke tests, protected staging, and human review of the | ||
| staged package before a separately authorized 2FA approval. | ||
@@ -89,0 +107,0 @@ ## Pre-commit (lefthook) |
@@ -421,3 +421,6 @@ import { spawn } from "node:child_process"; | ||
| } | ||
| return parseRawReview(envelope.data.result, reviewerId, label); | ||
| const rawReview = envelope.data.structured_output == null | ||
| ? envelope.data.result | ||
| : JSON.stringify(envelope.data.structured_output); | ||
| return parseRawReview(rawReview, reviewerId, label); | ||
| } | ||
@@ -424,0 +427,0 @@ function dropNullKeys(value) { |
@@ -143,2 +143,3 @@ import { z } from "zod"; | ||
| result: z.ZodString; | ||
| structured_output: z.ZodOptional<z.ZodUnknown>; | ||
| }, z.core.$strip>; | ||
@@ -145,0 +146,0 @@ export declare const ClaudePluginListSchema: z.ZodArray<z.ZodObject<{ |
+1
-0
@@ -66,2 +66,3 @@ import { z } from "zod"; | ||
| result: z.string(), | ||
| structured_output: z.unknown().optional(), | ||
| }); | ||
@@ -68,0 +69,0 @@ export const ClaudePluginListSchema = z.array(z.looseObject({ |
+2
-2
@@ -15,7 +15,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; | ||
| "(approve | revise | reject) with prioritized findings. " + | ||
| "Read-only, writes a session log to ~/.inspectrum/sessions/.", | ||
| "Runs configured reviewer CLIs and writes a local session log to ~/.inspectrum/sessions/.", | ||
| inputSchema: ReviewPlanToolShape, | ||
| outputSchema: ReviewPlanToolOutputShape, | ||
| annotations: { | ||
| readOnlyHint: true, | ||
| readOnlyHint: false, | ||
| idempotentHint: false, | ||
@@ -22,0 +22,0 @@ destructiveHint: false, |
+12
-3
| { | ||
| "name": "inspectrum", | ||
| "version": "0.2.1", | ||
| "description": "Universal MCP server for multi-LLM plan review", | ||
| "version": "0.2.2", | ||
| "description": "Automatic Codex plan review in Claude Code; on-demand in local MCP hosts; human approval stays yours", | ||
| "type": "module", | ||
@@ -14,2 +14,5 @@ "bin": { | ||
| "README.md", | ||
| "PRIVACY.md", | ||
| "docs/", | ||
| "server.json", | ||
| "CONTRIBUTING.md", | ||
@@ -26,2 +29,3 @@ "LICENSE", | ||
| "test:e2e": "npm run build && vitest run tests/e2e", | ||
| "check:submission": "node scripts/check-submission-readiness.mjs", | ||
| "dev": "node --import tsx/esm src/server.ts", | ||
@@ -63,3 +67,3 @@ "prepack": "npm run build && npx tsc --noEmit && npx eslint src/ && npm run test:coverage", | ||
| "@iarna/toml": "^2.2.5", | ||
| "@modelcontextprotocol/sdk": "^1.29.0", | ||
| "@modelcontextprotocol/sdk": "^1.30.0", | ||
| "zod": "^4.4.3" | ||
@@ -79,3 +83,8 @@ }, | ||
| "vitest": "^4.1.5" | ||
| }, | ||
| "overrides": { | ||
| "external-editor": { | ||
| "tmp": "0.2.7" | ||
| } | ||
| } | ||
| } |
+11
-3
| <div align="center"> | ||
| # inspectrum | ||
| # Inspectrum | ||
@@ -22,4 +22,12 @@ ### Catch the bad plan before your agent spends the tokens. | ||
| **inspectrum wires a rival LLM into your agent's plan mode.** When Claude Code finishes a plan, Codex (GPT) reviews it *before* the approval dialog reaches you. Findings bounce the plan back to Claude for revision — so the plan you finally approve has already survived a second opinion. (And if the reviewer can't run, the plan passes through with a warning, never blocked.) | ||
| **Inspectrum wires a rival LLM into your agent's plan mode.** When Claude Code finishes a plan, Codex (GPT) reviews it *before* the approval dialog reaches you. Findings bounce the plan back to Claude for revision — so the plan you finally approve has already survived a second opinion. (And if the reviewer can't run, the plan passes through with a warning, never blocked.) | ||
| ## When a skill is enough | ||
| For an occasional second opinion, a rule can tell one agent to call another and compare the replies. That is a reasonable lightweight option. | ||
| Inspectrum is for the repeatable checkpoint. In Claude Code, the plugin runs at the plan-to-execution boundary without relying on a remembered prompt, caps revision loops, and fails open on operational errors. Other local MCP hosts can call the same `review_plan` contract on demand. Both paths keep findings attributed, return a common verdict shape, preserve human control, and write local evidence for successful reviews. | ||
| Recreating those guarantees with a skill means maintaining the orchestration, output validation, health checks, failure policy, and session record yourself. | ||
| ## Quick start | ||
@@ -139,3 +147,3 @@ | ||
| | **Codex app / CLI** | Claude | `codex mcp add inspectrum -- npx -y inspectrum@latest` + config below | | ||
| | **Claude Desktop** (macOS) | Codex (GPT) | Download [`inspectrum-0.2.1.mcpb`](https://github.com/yannmenec/inspectrum/releases/download/v0.2.1/inspectrum-0.2.1.mcpb), open, confirm. The earlier v0.2.0 bundle was incomplete — use the v0.2.1 asset, not npm/stdio. | | ||
| | **Claude Desktop** (macOS) | Codex (GPT) | Download [`inspectrum-0.2.2.mcpb`](https://github.com/yannmenec/inspectrum/releases/download/v0.2.2/inspectrum-0.2.2.mcpb), open, confirm. The earlier v0.2.0 bundle was incomplete — use the v0.2.2 asset, not npm/stdio. | | ||
| | **Cursor** | Codex (GPT) | [](https://cursor.com/en/install-mcp?name=inspectrum&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImluc3BlY3RydW1AbGF0ZXN0Il19) | | ||
@@ -142,0 +150,0 @@ |
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
176491
14.44%66
6.45%2936
1%303
2.71%19
5.56%