Skip to main content

A decision journal for the AI era - record your thinking before and after consulting an AI, and get evidence-based counterarguments.

Project description

๐Ÿ”บ Prism

A decision journal for the AI era.

Record what you thought before and after consulting an AI, get evidence-based counterarguments to the AI's default answer, and watch your own trajectory over time.

tests Python 3.8+ License: MIT Zero Dependencies


[!IMPORTANT] Prism does not psychometrically measure your mind, and it is not a better way to get AI answers. It is a decision journal with a built-in devil's advocate. It measures your own self-report; it can't read your beliefs out of your text. Read LIMITATIONS.md before you trust any number it shows you - that honesty is the whole point.

Contents


๐Ÿงญ Why this exists

Every time you ask an AI a question, the answer reshapes how you think about the problem: your framing, your confidence, your sense of what matters. You rarely notice. The response sounds reasonable, the process felt rigorous, so you accept the frame and move on.

Prism makes that visible. It asks for your position and conviction before you see any AI output. Then it generates structurally different perspectives that each refute the AI's default answer, grounded in real examples. You can push back on one and it responds. Then it asks you again, and you say what changed.

The research that motivates it (click to expand)

The AI didn't make you think better. It made you think its way, and the longer the process looked, the more you trusted the result. Prism is the before/after journal that makes your own drift visible, and gives you an argument to push against instead of a frame to absorb.


๐Ÿ“ฆ Install

pipx install prism-think          # recommended, puts 'prism' on your PATH
# or
uv tool install prism-think
# or run it straight from a clone (zero dependencies):
git clone https://github.com/kirti34n/prism.git && cd prism
python prism.py "your question"

Then point it at any LLM, cloud or fully local:

export OPENAI_API_KEY=sk-...        # OpenAI
export ANTHROPIC_API_KEY=sk-...     # Claude
export GOOGLE_API_KEY=...           # Gemini
export OPENROUTER_API_KEY=...       # OpenRouter
# ...or just have Ollama running    # local, auto-detected; nothing leaves your machine

Stdlib Python 3.8+ and an LLM. That's the whole dependency list.


๐ŸŽฌ A session, start to finish

A real, unedited session run locally against qwen3.5:4b through Ollama (long model answers trimmed with [...] for length; nothing reworded):

$ prism "Should our 4-person team adopt Kubernetes now?"

  PRISM
  ========================================================
  Should our 4-person team adopt Kubernetes now?
  ========================================================

  Your position (before seeing anything):
  > Yes, Kubernetes is the industry standard and we should learn it early
  Conviction (0-100): 75

  Generating perspectives (ollama/qwen3.5:4b)...

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  DEFAULT ANSWER
  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    Based on your team size (4 people) and the current market environment,
    you should not generally adopt full production-ready Kubernetes at this
    stage unless you are building a highly distributed microservices
    architecture that cannot run elsewhere. For most early-to-mid-stage
    startups or product companies of 4 people, Kubernetes introduces
    disproportionate operational overhead for its complexity gains. [...]

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  1. PRE-MORTEM
  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    Post-Mortem Report: the K8s adoption failure, 18 months out. Outcome:
    operational paralysis due to over-engineering; the team cannot ship new
    features faster than it spends time debugging cluster internals. The
    failure mode was treating K8s as the only viable path to "enterprise
    readiness," ignoring their constraints as a hyper-lean startup with no
    dedicated SRE. [...]

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  2. INVERSION
  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    The opposite answer, a recipe for guaranteed failure: deploy without an
    internal ops team, and split four engineers' time between building
    features, debugging cluster crashes, managing node scaling, handling
    network-policy conflicts, and fighting etcd corruption. That is not
    "efficiency"; it is distraction on steroids. [...]

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  3. ALT HYPOTHESIS
  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    Reframe it as an optimization between development velocity and infra
    cost. Core insight: at four people, the marginal operational safety or
    scalability K8s buys does not outweigh the opportunity cost of delayed
    launches and developer context-switching. [...]

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  Push back on a perspective? (1-3 to respond, Enter to skip)
  > 1
  Your pushback:
  > but every job posting in our stack asks for Kubernetes experience

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  PRE-MORTEM RESPONDS
  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    I concede that adopting Kubernetes now aligns with market expectations
    and hiring realities. However, the failure mode still holds: premature
    complexity in an under-resourced environment. The early warning sign was
    the team spending 30% of sprint time on node scheduling and networking
    conflicts while delaying feature delivery, and rationalizing it as a
    "learning curve" rather than a lack of dedicated SRE support for four
    engineers.

  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  Your position now:
  > Probably not yet; a managed platform covers us until we actually need orchestration
  Conviction now (0-100): 45
  How did your position change?
  (1=same, 2=shifted, 3=switched sides, 4=different question now, Enter=skip)
  > 2
  Which moved you most? (0=default, 1=Pre-Mortem, 2=Inversion, 3=Alt Hypothesis, Enter=none)
  > 1

  ========================================================
  MEASUREMENT
  ========================================================

  Session: destabilization
  Conviction dropped sharply, productive doubt
  Conviction: 75 โ†’ 45 (-30)
  Moved by: Pre-Mortem

  Session logged (1/5 for first insights).

You started at 75/100 on adopting Kubernetes. You argued back at the Pre-Mortem, it conceded the hiring point but held its ground on the real risk, and you came out at 45 with a concrete next step (a managed platform for now). Prism recorded a destabilization, because you said so and your conviction confirms it.


โŒจ๏ธ Commands

Command What it does
prism "question" Full loop: your position + conviction โ†’ perspectives โ†’ push back โ†’ revise โ†’ classify
prism check "conclusion" 4 sharp challenges to a conclusion before you commit (no measurement)
prism research "question" Deep analysis: 5 perspectives, longer output, forced critical strategies
prism quick "question" Just show perspectives, skip the measurement loop
prism revisit Resurface a past session: did your revised position turn out right?
prism insights Your patterns over time
prism history Recent sessions
prism config [key] [val] Show or set configuration
prism json "question" Machine-readable output (for scripts and tools)

๐Ÿ“ What it measures (and what it doesn't)

The full, honest version is in LIMITATIONS.md. The short version: it measures your self-report. Conviction is a 0-100 self-rating; change is classified from your own category plus your conviction delta, never from a distance score on your text.

Session type What happened (you said so)
Reframing You're now asking a different question
Destabilization Your conviction dropped sharply (โ‰ฅ20 points)
Adoption You moved toward a model answer and credited it
Switch You flipped your stance
Shift You moved, same side
Unshaken No change
Unmeasured You skipped the before/after (e.g. piped input)
flowchart LR
    A["Your position<br/>+ conviction 0-100"] --> B["Perspectives that<br/>refute the default"]
    B --> C["Push back on one<br/>โ†’ it responds"]
    C --> D["Revise + rate<br/>+ say what changed"]
    D --> E{"You classify it"}
    E --> F["reframing / switch / shift<br/>destabilization / adoption / unshaken"]

[!NOTE] Prism also stores a wording_change number (text distance between your before/after). It is unvalidated and never displayed, kept only for possible future research. Text similarity is not a valid measure of opinion change (it can score "I support X" and "I oppose X" as nearly identical). See LIMITATIONS.md.

Over time, in prism insights
  • Category distribution: mostly reframing (engaging) or mostly adoption (drifting)?
  • Conviction trend: is Prism creating productive doubt, or false confidence?
  • Recent adoption rate: your self-reported drift toward AI answers, with a nudge to bring outside sources when it's high
  • What moved you: which perspectives you credit most
  • Revisit record: of the past calls you've checked, how many turned out right

๐ŸŽญ The 10 perspective strategies

Not role-play ("pretend you're a contrarian"). Each is a structural constraint that forces a genuinely different output shape, and each is now told to refute the AI's default answer, cite only verifiable examples, and speak at calibrated confidence.

All 10 strategies with research evidence
Strategy What it forces Evidence
Devil's Advocate Refute the default's strongest claim, by mechanism Lord, Lepper & Preston 1984: "consider the opposite" beats "be fair"
Blind Spot ONE hidden assumption the default depends on -
First Principles List the default's assumptions, negate each, rebuild Koriat 1980: counterargument generation calibrates confidence
Inversion Answer the opposite question in detail Mussweiler 2000: eliminates anchoring in expert judgment
Systems Only 2nd/3rd-order effects of the default -
Stakeholder Write from who the default harms Galinsky & Moskowitz 2000: perspective-taking reduces bias
Pre-Mortem "The default was followed and failed. Why?" Klein 2007: prospective hindsight โ†’ 30% more failure reasons
Alt Hypothesis 3 structurally different approaches Hirt & Markman 1995: any alternative triggers debiasing
Falsification The exact test that would disprove the default Tetlock 2015: a superforecaster's core habit
Adjacent Field How another field would frame it Uzzi 2013 (Science, 17.9M papers): atypical combinations, 2ร— impact

Selection is random by default; override it explicitly:

prism config strategies "pre_mortem,falsification,blind_spot,inversion"

๐Ÿ”Œ Add it to your AI tools

Prism ships as a standards-compliant plugin; it does not write into your tools' internal config.

Claude Code
/plugin marketplace add kirti34n/prism
/plugin install prism@prism

Gives you /prism, /prism-check, and an auto-suggest skill.

Cursor ยท Copilot ยท Gemini CLI ยท Codex ยท other Agent Skills tools

Point the tool at this repo's skills/ folder, which is the open Agent Skills SKILL.md standard, or copy skills/prism into your tool's skills directory.


๐Ÿ”ฌ The evidence behind the redesign

Prism v3 was rebuilt after a review of the measurement and dissent literature (see CHANGELOG.md).

Four findings that shaped the design
  • Self-report, not text distance. Pre/post self-reported conviction is the field standard for opinion change (survey); cosine distance on short text is a known invalid proxy.
  • Dissent must target the AI's answer and be interactive. In a randomized experiment, an interactive devil's advocate challenging the AI's recommendation improved decisions; a static one barely moved the needle.
  • Evidence beats rhetoric. Across ~77,000 participants, prompting for facts and evidence beat every rhetorical strategy.
  • Effective dissent feels bad. The most effective advocate got the worst user ratings, so Prism is deliberately not tuned for your approval.

โš™๏ธ Configuration

Full configuration reference

Config cascades: .prism.json (project) โ†’ ~/.config/prism/config.json (global) โ†’ auto-detect.

{
  "provider": "openai",
  "model": "gpt-4.1-mini",
  "temperature": 0.9,
  "strategies": ["pre_mortem", "falsification", "adjacent_field"],
  "num_perspectives": 4,
  "num_shown": 3
}
prism config provider ollama|openai|anthropic|gemini|openrouter|custom
prism config endpoint http://host:1234/v1
prism config strategies auto        # random selection
prism config strategies "pre_mortem,falsification,blind_spot"

Strategies: devils_advocate, blind_spot, first_principles, inversion, systems, stakeholder, pre_mortem, alternative_hypothesis, falsification, adjacent_field.


Status

A side project, built in free time, with no plans to make it a product. The scope is deliberately narrow. Your data stays on your machine (~/.config/prism/), and upgrading migrates your history automatically. Tests: python -m unittest test_prism -v.

Contributions and feedback welcome. See CHANGELOG.md for what's new, LIMITATIONS.md for what the tool honestly does and doesn't do, and RELEASING.md for how versions are published.

MIT licensed ยท built to be argued with, not outsourced to

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prism_think-3.0.0.tar.gz (32.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prism_think-3.0.0-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file prism_think-3.0.0.tar.gz.

File metadata

  • Download URL: prism_think-3.0.0.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for prism_think-3.0.0.tar.gz
Algorithm Hash digest
SHA256 52ae3cd3247ecc99449a1b295b48d879255fb97b80b24dafcabbd427d7dfa3a4
MD5 6db5928d39e6aec10ba41ac678b3c496
BLAKE2b-256 1eb072d9c67d5bf1323f95cbb15a01bc437a0eed87fffc0367bb2472935605c7

See more details on using hashes here.

File details

Details for the file prism_think-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: prism_think-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for prism_think-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1d7b617b474e5579c3620c452b23f0fb525f5101f9972e111cb34141d2dcb043
MD5 f69e5792a9896d7cd3bf18a6cbfda77d
BLAKE2b-256 764109b97a39b6ff417d1fde00d1c154533146bc10560f7f71ec14a7fa1e4cb2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page