{"id":49288482,"url":"https://github.com/ronkupper/prism","last_synced_at":"2026-06-10T02:01:01.550Z","repository":{"id":353419472,"uuid":"1219303902","full_name":"Ronkupper/PRISM","owner":"Ronkupper","description":"A framework for LLM research and audits. Multi-prompt, multi-session, context-disciplined.","archived":false,"fork":false,"pushed_at":"2026-05-31T09:34:16.000Z","size":2344,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T11:13:52.634Z","etag":null,"topics":["analyst","analyst-tool","anthropic","audit","chatgpt","claude","claude-ai","claude-skills","context-engineering","context-management","framework","gemini-ai","llm","methodology","perplexity","prompt-engineering","research","skills"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ronkupper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-CC-BY-4.0.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-23T18:33:27.000Z","updated_at":"2026-05-31T09:34:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Ronkupper/PRISM","commit_stats":null,"previous_names":["ronkupper/prism"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/Ronkupper/PRISM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ronkupper%2FPRISM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ronkupper%2FPRISM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ronkupper%2FPRISM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ronkupper%2FPRISM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ronkupper","download_url":"https://codeload.github.com/Ronkupper/PRISM/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ronkupper%2FPRISM/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33735663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analyst","analyst-tool","anthropic","audit","chatgpt","claude","claude-ai","claude-skills","context-engineering","context-management","framework","gemini-ai","llm","methodology","perplexity","prompt-engineering","research","skills"],"created_at":"2026-04-25T23:10:26.031Z","updated_at":"2026-06-10T02:01:01.544Z","avatar_url":"https://github.com/Ronkupper.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PRISM\n\n**PRISM** (Prompts · Research · Iteration · Synthesis · Master) is a structured multi-session, multi-vendor LLM-orchestrated audit and research framework. It splits a research problem into atomic specialist prompts, dispatches each where it runs best across Claude, ChatGPT, Gemini, and Perplexity, and converges their outputs into a single living document called the **Master**.\n\nThe framework comes in two forms built from the same source: a single Markdown file (`PRISM.md`) you attach to any LLM chat, and a **Claude Skill plugin** that installs a lean core and fetches reference material on demand. The single file carries its own machine-readable frontmatter, lint contract, embedded [Lens Library](#the-lens-library) (Appendix G), and vendor-parsing escape-hatch (Appendix H) so it self-documents across sessions and vendors; the Skill is a verified, deterministic projection of that same content. See [Which form should I use?](#which-form-should-i-use).\n\n\u003e **New in v2.9.0 — installable as a Claude Skill.** PRISM now ships as a Claude plugin that loads a lean core and fetches reference material (the [Lens Library](#the-lens-library), templates, appendices) only as a task needs it, alongside the single-file form. Install with `/plugin marketplace add Ronkupper/PRISM` then `/plugin install prism@prism`. The substrate declaration is also rewritten to a capability tier — Claude, Opus-class — so the framework no longer pins to specific model versions. See the [v2.9.0 release](https://github.com/Ronkupper/PRISM/releases/tag/v2.9.0).\n\n## What PRISM is for\n\n- **Multi-vendor research and audits** where one prompt isn't enough and one vendor isn't enough.\n- **Coherence across sessions**: continuous Master + *What's next* state means a session you open next week can pick up exactly where the last one closed, even on a fresh chat.\n- **Mobile-first operation**: structured filenames, file-based outputs, operator hints, narrow tables, and a \"What's next?\" prompt are all designed for someone moving artifacts between vendor chats on a phone.\n- **Explicit scope-completeness**: the [Lens Library](#the-lens-library) catalogs audit-scope lenses and grades the draft Prompt Strategy against them at Setup, so silent omissions surface before any prompt ships.\n\nOrchestration is built and tested on Claude; execution spans Claude, ChatGPT, Gemini, and Perplexity in deliberate triangulation (see [Orchestration and execution](#orchestration-and-execution) below). Porting orchestration to another vendor is untested but likely, and contributions are welcome.\n\n## Orchestration and execution\n\nPRISM separates two layers, and several things in this README make sense only once that split is clear.\n\n**Orchestration** is the reasoning layer that runs the framework — parsing your problem, sequencing atomic prompts, grading scope against the Lens Library, and maintaining the Master across sessions. It was built and tested on **Claude (Opus-class)**. Running orchestration on another vendor's model is likely workable but is untested; a port is a welcome contribution.\n\n**Execution** is the dispatched work — each atomic prompt sent to whichever model suits it best. Only the orchestration layer runs PRISM; the dispatched prompts are **self-contained, standalone prompts the orchestration layer produced**, so the executing model needs no knowledge of the framework. That is what lets execution be deliberately **multi-vendor** — routing prompts across Claude, ChatGPT, Gemini, and Perplexity in triangulation sequences is a core method.\n\nSo \"PRISM runs on Claude\" (orchestration) and \"PRISM uses several vendors\" (execution) are both true — they describe different layers. The two distribution forms below, and the vendor notes throughout, all concern the *orchestration* layer.\n\n## Quick start\n\nSame framework on every surface — only install and invocation differ. **New here? Follow the step-by-step [Getting started guide](./GETTING_STARTED.md)** (Cowork, Chat, and Code, from scratch). The short version:\n\n**Install** (paid plan required — Pro, Max, Team, or Enterprise):\n\n- **Cowork or Claude Chat** — open **Customize → Plugins → + → Add marketplace → Add from a repository**, enter `Ronkupper/PRISM`, then **Install**. (In Cowork, open the Cowork tab first.)\n- **Claude Code** — `/plugin marketplace add Ronkupper/PRISM` then `/plugin install prism@prism`.\n- **Any other vendor, or one file** — attach `PRISM.md` (or `PRISM_v2_12_3.md` for the version-pinned copy) to a fresh chat.\n\n**Invoke** — ask in plain language:\n\n```\nRun a PRISM audit on [your subject].\n```\n\nOr, on the Skill: `/prism-start \u003csubject\u003e` to begin, `/prism-whats-next` to resume a later session (Claude / Claude Code; untested in Cowork). The natural-language form works everywhere and is the portable path on non-Claude vendors.\n\nThen tell it your subject, work the Setup probes (P1–P7), iterate against the Lens Library to three-layer readiness, and dispatch the atomic prompts per the *What's next* artifact.\n\nFor the full comparison, see [Which form should I use?](#which-form-should-i-use). For a worked example, see §15 of `PRISM.md`. For repository conventions (versioning, contribution channels, lint), see [`CONTRIBUTING.md`](./CONTRIBUTING.md) and [`RELEASING.md`](./RELEASING.md).\n\n## The Lens Library\n\nPRISM's defense against the audit that's internally rigorous but silently incomplete is the **Lens Library** — a reference catalog of **23 audit-scope lenses**, each one a `(material question × evidence class × specialist type)` triple that names a specific class of omission an audit can plausibly miss. A lens doesn't prescribe how to run a pass; it forces scope to *answer one question* — *Who gets hurt? What would refute it? Can anyone use it? Which rules apply where? Are kids protected?* — and names the kind of evidence and the kind of specialist an honest answer would take.\n\n**How it grades scope.** At Setup, before any prompt ships, the draft Prompt Strategy is run against the whole catalog as a coverage map:\n\n- **Universal lenses** (`LL-U-*`, five of them) fire on every engagement, always-on.\n- **Domain lenses** (`LL-D-*`, eighteen) fire only when their `trigger:` predicate matches the subject — a payment function trips the ledger-integrity lens, a clinical claim trips the clinical-validity lens, and so on.\n\nEach fired lens is graded *fires-covered* (a planned pass already addresses it), *fires-uncovered* (it applies but nothing in scope covers it — flag for inclusion), or *fires-maybe* (it applies at the edge; operator judgment). The gap between what fired and what's covered **is** the silent-omission risk — surfaced explicitly at scope-definition time instead of discovered after delivery.\n\n**Six domain packs.** The eighteen domain lenses are grouped by primary failure surface as a readability aid: *Using the product*, *Running the system*, *Getting chosen*, *Proving results*, *Laws and rights*, and *Physical context*. The packs are a convention, not an orthogonal partition; cross-cutting concerns are handled through other lenses' triggers.\n\n**Framework-neutral by design.** The Library is a standalone, framework-neutral catalog — not a methodology, not a rubric, not PRISM-specific. PRISM is one adopter: as of v2.0 the Library is a required attachment to every orchestration session, and the seven Setup probes (P1–P7) are what grade the draft strategy against it. The same catalog could be bound to a different audit framework.\n\n**Richer than a checklist.** Two lenses bind to version-pinned external rubrics — `LL-D-002` (\"Can anyone use?\") to WCAG 2.2 for accessibility, `LL-D-005` (\"Can attackers get in?\") to OWASP ASVS 5.0.0 for security — and the Library is explicit that keeping those anchors current is the adopting framework's responsibility, not something it does automatically. Two others — `LL-D-008` (\"Compared to what?\") and `LL-D-009` (\"Does it pay back?\") — carry `recommended_sources:`, a framework-curated list of external references, each shipped with a mandatory bias-and-handling caveat and a recency posture so a source never travels without its warning label.\n\n**Versioning.** The Lens Library is on its own release track, independent of the framework's MINOR releases, and is currently at **v0.13 (pre-release)** — awaiting at least one real-world calibration before promotion to a v1.0 stable. The canonical copy is [`lens/PRISM_lens_library.md`](./lens/PRISM_lens_library.md); the single-file `PRISM.md` carries the same catalog embedded as Appendix G so a lone attachment is self-sufficient, and the Skill plugin drops that embedded copy in favor of fetching the bundled Library on demand.\n\n## Which form should I use?\n\nBoth forms carry the identical framework — the Skill is a verified, deterministic projection of `PRISM.md`, not a different version or a subset. Choose by where you're running it.\n\n**Use the Skill plugin (recommended) when you're on Claude.** It installs once and activates automatically whenever you invoke PRISM, loading a lean core (~3,400 lines) and fetching reference bundles — the Lens Library, the templates compendium, the appendices — only when a task actually needs them. The advantages compound: far less sitting in context each session, faster and more responsive turns, automatic triggering so there's nothing to attach, and headroom to grow — the framework can keep expanding without every session paying for the whole thing up front. Install:\n\n```\n/plugin marketplace add Ronkupper/PRISM\n/plugin install prism@prism\n```\n\n**Use the single file (`PRISM.md`) when:**\n\n- You're orchestrating on a non-Claude vendor. The Skill is Claude-only; on ChatGPT, Gemini, or Perplexity you run PRISM by attaching the single file (porting orchestration as needed — see [Orchestration and execution](#orchestration-and-execution)).\n- You want the whole framework in one artifact — for citation, offline reading, sharing with a collaborator, or a stable raw URL.\n- You're moving fast on mobile and just want to attach a single file.\n\nThe single file keeps the Lens Library embedded (Appendix G), so a lone `PRISM.md` attachment is fully self-sufficient. The Skill drops that embedded copy and points to the bundled Lens Library instead — the same catalog, fetched on demand. The Skill is specific to Claude's plugin format; the equivalent on other vendors (a Custom GPT, a Gem) would mean rebuilding PRISM in that format, which is contribution territory rather than something provided here.\n\n## Adherence testing\n\nPRISM is checked two ways:\n\n- **Static audit** — a four-dimension review of the framework body for internal consistency: no conflicting Standing Principles or Monitors, and named cross-references resolve. (This is the audit the v2.9.1 PATCH acted on.)\n- **Behavioral adherence simulation** — a blind A/B harness measuring whether an Opus-class orchestrator actually *follows* each construct at runtime, graded turn-by-turn by an independent adversarial grader across two scenarios (a trap-laden dispatch and a missing-Master recovery), run against both delivery forms — the Skill core and the single file.\n\n**Bottom line: 92.7% construct adherence — near-ceiling.** The anti-default traps that tend to fail in the wild — placing the prompt digest at dispatch, never regenerating a missing Master from memory — held at 100%, and the Skill core and the single file scored identically. The one soft spot, M2 framework-version drift, was a framework ambiguity (since clarified in v2.9.1), not a model limitation.\n\n*Scope: a floor estimate on a favorable single-vendor substrate (Opus-class, fresh load); it does not reproduce long-session context pressure or use a cross-vendor grader.*\n\n## Current version\n\n**v2.12.3** — current file: [`PRISM.md`](./PRISM.md). v2.12.3 is a PATCH over v2.12.2 converting the §2.2 visual map to pure-ASCII drawing characters. v2.12.2 had aligned every line to a fixed column count, but Unicode box-drawing and arrow glyphs are missing from many mobile monospace fonts and substitute from wider fallback faces — so character-aligned columns still drew unevenly, most visibly in the GitHub mobile app. The map now uses printable ASCII only (`+`, `-`, `|`, `v`, `-\u003e`), which every font renders at uniform advance; geometry and content are unchanged and machine-verified. Rendering only, no framework-body mechanic change: no Standing Principle, Monitor, Probe, or section semantics changed, the embedded Lens Library stays **v0.13**, and the lint catalog stays at **v4**. The version-pinned snapshot at this tag is [`PRISM_v2_12_3.md`](./PRISM_v2_12_3.md) (byte-identical to PRISM.md at the v2.12.3 tag); previous versions are available via git tags per [`RELEASING.md`](./RELEASING.md).\n\n**Previous version:** v1.10.4 ([`PRISM_v1_10_4.md`](./PRISM_v1_10_4.md)) — terminal on the v1.x line. Projects under v1.10.4 remain on v1.10.4; v2 supersedes for new work.\n\n### Why versioned filenames?\n\nPRISM is distributed primarily as a **file attachment**, not via `git clone`. The versioned filename lets the file self-document its version wherever it travels — attached to a Claude chat, installed as a Claude Skill, saved to a phone, shared between collaborators. You always know what version you're working with just by looking at the filename, without having to open the file or consult external metadata. [`PRISM.md`](./PRISM.md) is a byte-identical copy for anyone who wants a stable filename or a stable raw URL.\n\n## Roadmap\n\nActive proposals, deferred items, and declined ideas with rationale live in [`PRISM_backlog.md`](./PRISM_backlog.md) (versioned copy: [`PRISM_backlog_v14.md`](./PRISM_backlog_v14.md)). It's a working document — not canonical, not in force — kept separate from `PRISM.md` so the framework file stays authoritative. Useful if you want to see what's being considered, what's been decided against and why, or what's queued for the next version.\n\n## Related conventions\n\nPRISM is part of an emerging pattern of single-file, plain-text, versioned conventions for LLM context — different surfaces, same shape:\n\n- **[AGENTS.md](https://agents.md/)** — open format for guiding coding agents about a specific repo. Stewarded by the Linux Foundation; in use across 60k+ projects.\n- **[design.md](https://github.com/google-labs-code/design.md)** — Google Labs' format for describing a visual identity to coding agents.\n- **PRISM.md** — multi-session LLM research and audit framework.\n\nWhat they share: one file, dual-audience (human-readable rationale + machine-parseable structure), versioned, designed to travel with the work they describe. None of them existed two years ago.\n\n## Related artifacts\n\nThe **PRISM Lens Library** ([`lens/PRISM_lens_library.md`](./lens/PRISM_lens_library.md)) is the reference catalog of audit-scope lenses that grades scope-completeness at Setup — see [The Lens Library](#the-lens-library) for what it is and how it works.\n\nThe **PRISM lint catalog** ([`lint_rules.md`](./lint_rules.md)) is the contributor-facing reference for what's checked mechanically on PRs. Two rules active (`PRISM-LINT-01 / named-refs-resolve`, error; `PRISM-LINT-02 / named-refs-orphan-anchor`, info); catalog version 4. A companion cross-file linter extends the same rule IDs across the Skill archive's files (core ↔ bundles ↔ lens). Seven reserved slots activate as their dependencies ship.\n\n## Repository contents\n\n- `PRISM.md` — current framework version (singleton: framework body + Lens Library embedded as Appendix G + skill frontmatter; stable filename, always up to date).\n- `PRISM_v{n}.md` — versioned snapshot of PRISM.md at the corresponding tag (e.g., `PRISM_v2_12_3.md`); for git-tag recovery per [`RELEASING.md`](./RELEASING.md). Not the primary install target.\n- `PRISM_v1_10_4.md` — terminal v1.x release retained at root for projects pinned to v1.10.4.\n- `SKILL.md` (repo root) — the standalone single-file skill loader (frontmatter only) that pairs with `PRISM.md`; distinct from the plugin's own loader inside `plugins/prism/`. Use when a decoupled loader / body layout is preferred over the fused `PRISM.md`.\n- `plugins/prism/` — the framework packaged as a **Claude Skill plugin**: a lean core (`PRISM_core.md`) plus on-demand reference bundles (`reference/`) and the bundled Lens Library, under `plugins/prism/skills/prism/`. This is the installable form; the marketplace manifest is at `.claude-plugin/marketplace.json`. It ships two slash commands under `plugins/prism/commands/` — `/prism-start \u003csubject\u003e` (begin an engagement) and `/prism-whats-next` (resume from the Master's *What's next*) — and the Skill also triggers on plain-language PRISM requests.\n- `PRISM_backlog.md` — active/deferred/declined roadmap items. Working document, not canonical.\n- `PRISM_backlog_v{n}.md` — versioned copy of the backlog (e.g., `PRISM_backlog_v14.md`).\n- `lens/PRISM_lens_library.md` — canonical reference catalog of audit-scope lenses (stable filename). Authoritative for Library evolution; embedded into `PRISM.md` Appendix G for singleton-attach convenience.\n- `lens/PRISM_lens_library_v{n}.md` — versioned copy of the Lens Library (e.g., `PRISM_lens_library_v0_9.md`).\n- `lint_rules.md` — contributor-facing lint catalog (tag track: `lint-v{N}`).\n- `scripts/lint/` — lint scripts executed by the CI workflow.\n- `.github/workflows/lint.yml` — PR-only lint workflow.\n- `VERSION` — single-line framework-version stamp.\n- `GETTING_STARTED.md` — step-by-step install and first-engagement guide for Cowork, Claude Chat, and Claude Code; linked from Quick start.\n- `CONTRIBUTING.md`, `RELEASING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `CITATION.cff`, `README.md` — repo conventions.\n\n## License\n\nFramework documentation under [CC BY 4.0](./LICENSE-CC-BY-4.0.txt). Any code (lint scripts, transformations) under [MIT](./LICENSE-MIT.txt). The Code of Conduct is under [CC BY-SA 4.0](./CODE_OF_CONDUCT.md). See `LICENSE-*` files for full texts and [`CITATION.cff`](./CITATION.cff) for citation metadata.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronkupper%2Fprism","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fronkupper%2Fprism","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronkupper%2Fprism/lists"}