AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Semantic change intelligence for coding agents — complete impact sets, edit-ready context, and diff verification. Local CLI, MCP, and Go API.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Semantic change intelligence for coding agents. Prism turns indexed repository structure into task-shaped answers: potential change-impact sites, source context, and a review of an agent-authored diff.
Prism embeds the Grove code graph. It runs locally as one binary, exposes CLI and MCP interfaces, and requires no hosted service or API token.README 전문 보기 ↗Semantic change intelligence for coding agents. Prism turns indexed repository structure into task-shaped answers: potential change-impact sites, source context, and a review of an agent-authored diff.
Prism embeds the Grove code graph. It runs locally as one binary, exposes CLI and MCP interfaces, and requires no hosted service or API token.
Text search is excellent for locating a name. It cannot reliably distinguish references from unrelated text, follow an override family, or enumerate types that implicitly satisfy an external interface. Prism combines full-text search with a typed project graph, then exposes the result through operations that match the question an agent is trying to answer.
| Need | Operation |
|---|---|
| Locate a symbol or exact text | prism search |
| Gather edit-ready source around known anchors | prism query |
| Read one file or symbol | prism read / prism lookup |
| Change a method signature | prism change-impact |
| Plan a rename | prism rename-plan |
| Evolve an interface | prism missing-implementations |
| Check an agent-authored diff | prism verify |
| Enforce component boundaries | prism arch |
Structural results report indexed coverage and known stale, partial, or heuristic evidence. A closed indexed result does not prove that every runtime caller or required edit is known.
Reference benchmark: docs/benchmarks/prism-v0.87.39-2026-10-21.md
(2026-10-21), measured on v0.87.39; v1.0.0 differs from it only in CLI help text. Claude Code with Sonnet 5.5, native tools vs Prism through the CLI
interface (prism init --interface cli). Same tasks, checkouts and tests in both
arms. Task cost is everything after the first request of a session, repriced at
Sonnet 5.5's 5-minute-cache prices.
Change work. 32 seeded tasks in Python, Java, TypeScript and Go: method renames where the name is shared with unrelated methods, property renames, and signature changes. Prism v0.87.39.
| Native | Prism | Prism / native | |
|---|---|---|---|
| Solved | 31 / 32 | 32 / 32 | |
| Task cost per task | $0.0646 | $0.0492 | 0.76× |
| Tool calls per task | 6.8 | 4.4 | 0.65× |
| Startup per session | $0.0607 | $0.0626 | 1.03× |
Bug fixes. 40 GitHub issues filed after the model's training cutoff, in Go, Java, TypeScript and Python projects. Measured on Prism v0.87.37; v0.87.38 and v0.87.39 did not change the bug-fix path.
| Native | Prism | Prism / native | |
|---|---|---|---|
| Solved | 23 / 40 | 25 / 40 | |
| Task cost per task | $0.0520 | $0.0477 | 0.92× |
| Tool calls per task | 6.85 | 5.85 | 0.85× |
| Startup per session | $0.0609 | $0.0626 | 1.03× |
The 25 vs 23 solve difference is within run-to-run noise. Read it as the same result.
Over a session. Startup is paid once per session, task cost once per task. Projected saving of Prism vs native for a session of N tasks of one kind:
| Tasks in session | Change work | Bug fixes |
|---|---|---|
| 1 | 11% | 2% |
| 10 | 21% | 7% |
| 20 | 22% | 8% |
| 40 | 23% | 8% |
The projection does not model context growth within a session or count Prism's one-time indexing. Limits: one model, one agent, one run per cell. The fact sheet has per-language slices, engine accuracy per language, and links to raw records in provasign/research.
# Homebrew (macOS or Linux)
brew install provasign/tap/prism
# macOS or Linux installer
curl -fsSL https://raw.githubusercontent.com/provasign/prism/main/install.sh | bash
# Windows PowerShell
irm https://raw.githubusercontent.com/provasign/prism/main/install.ps1 | iex
# Pin the current release
VERSION=v1.0.1 curl -fsSL https://raw.githubusercontent.com/provasign/prism/main/install.sh | bash
The installer writes to ~/bin by default. Set INSTALL_DIR to choose another directory.
Use either Homebrew or the standalone installer as the authoritative installation. If both
are present with different versions, prism init and the MCP server report their paths.
The standalone installer stops running Prism MCP servers before replacing the binary,
verifies the installed version, and removes Prism registrations left by the old global
configuration model. After changing installation methods or upgrading Homebrew, run
prism cleanup-global, run prism init in each project, choose the harnesses to configure,
and restart the coding agent so pinned MCP paths and long-running servers refresh.
The current release is v1.0.1. It embeds Grove v0.63.25 (Astkit v0.16.10).
Build from source with make build; run the full test suite with make test.
From the root of a repository:
prism init .
This detects installed and previously configured harnesses, recommends those as the
default, and asks which to configure. It then asks how agents should reach Prism:
MCP (the default) registers the compact project-local server; CLI registers
no MCP server and steers agents to run the prism command in their shell. Both
choices write prism.yaml and current instruction files. CLI init removes Prism's
own MCP registration from the selected harnesses' project configs if present.
The interactive prompt gives a source-file-size hint: CLI suits occasional calls,
while a resident MCP server is faster for repeated discovery, especially in a
large repository. It does not change the default or claim a model-cost saving.
Harness ids: claude, codex, cursor, windsurf, vscode, gemini, opencode.
For automation, pass a comma-separated list such as
prism init --harness claude,codex .; a first-time non-interactive init never assumes
all harnesses. Later runs can use prism init --yes . to reuse the selection recorded
in prism.yaml. Set the interface without a prompt with
prism init --harness claude,codex --interface cli . (or --interface mcp).
--yes and --refresh also reuse the recorded interface; a first-time
non-interactive init defaults to MCP. CLI mode requires prism on the agent's PATH.
Windsurf receives AGENTS.md steering only because its documented MCP
configuration is user-global, which Prism does not modify.
Codex loads the generated .codex/config.toml after the repository is trusted;
accept Codex's project-trust prompt, then restart or reload the session.
Use search to find an anchor, then ask the graph for the relationship you need:
prism search QueryData --scope text --exhaustive --files-only
prism change-impact 'QueryDataHandler.QueryData' --format text
prism query --terms ValidateRequest \
--include graph \
--format text
prism verify --base main --format text
With the MCP interface, prism init exposes one compact prism gateway with six
operations:
search locates symbols and source text.query returns budgeted source around named anchors, callers, and tests.read reads a known file or range and deduplicates unchanged repeat reads.lookup returns known symbol bodies, marking any omitted content.change_impact returns indexed declarations, implementation families, and caller candidates.verify reviews a diff against indexed potential impact sites.Run prism mcp --legacy only for compatibility testing with the former six-tool
surface; normal and init-generated MCP launches use the compact gateway.
CLI help is authoritative for the complete command and flag list:
prism --help
prism doctor .
prism init --read-guard . # install
prism init --no-read-guard . # uninstall
Installs a hook that denies a native Read once prism has already delivered
that exact line range earlier in the same session, pointing the agent back
at what it already has instead of paying for it twice. Off by default.
Claude Code only; hooks are a Claude Code mechanism. The v0.87.39 benchmark
above did not use it.
A delivered range stops counting as soon as its file may have changed: an
Edit/Write/MultiEdit/NotebookEdit of the file drops its ranges, a
Bash command that can rewrite files (git checkout/stash/reset/apply/...,
patch, sed -i, mv/cp, formatters, codegen, redirects into files)
drops all of them, and a file whose mtime or size differs from delivery time
is never blocked. Ranges are scoped to the Claude Code session that received
them.
--read-guard writes .claude/hooks/prism_read_tracker.py and
.claude/hooks/prism_read_guard.py, and adds two PostToolUse entries (on
mcp__prism__prism, and on Edit|Write|MultiEdit|NotebookEdit|Bash) and
one PreToolUse entry (on Read) to .claude/settings.json. Re-running it
upgrades an older install in place. It only ever adds entries — an existing
hook you already have on Read or elsewhere is never modified or replaced,
prism's just runs alongside it. Session state lives in
.claude/prism-read-guard/, which ignores itself in git. --no-read-guard
removes exactly what --read-guard added: the two script files, only the
settings.json entries whose command is prism's own (any other hook on the
same matcher is left in place), and the state (including the
.prism-read-tracker.json file older releases kept at the project root).
Both are standalone actions — running either does not require selecting
harnesses or otherwise running the rest of init.
The steps below name MCP operations (prism(op=...)); the CLI commands have
the same names (prism lookup, prism search, prism change-impact, ...).
lookup for a known symbol or search for an unknown location; batch related names in one call.change_impact when callers, overrides, contracts, or other affected sites need checking; a clearly local body-only edit need not call it. Preserve the returned set when used.query for related source context around explicit anchors, or read for a known file or range; inspect omission markers.verify is optional in every language. Consider it for Python, unchecked JavaScript, or PHP contract changes; for TypeScript or checked JavaScript, only when affected files lack a complete typecheck. Skip it after a complete build/typecheck of affected Go, Java, Rust, C/C++, or C# targets.prism search --scope text is a real repository text search. The graph adds value after location: callers, implementations, type relationships, tests, architectural edges, and completeness checks.
Add boundary rules to prism.yaml:
version: 2
harnesses: "claude,codex"
mcp_surface: "compact"
arch_deny:
- "internal/cli -> internal/mcp"
Then run:
prism map .
prism arch .
prism verify . --base main
prism arch reports the concrete file:line evidence for each forbidden component edge. prism verify checks the current diff for missed impact sites, new component dependencies, and introduced architecture violations.
Prism indexes Go, TypeScript/TSX, JavaScript/JSX, Python, Java, Rust, C/C++, C#, PHP, Swift, Kotlin, Objective-C, COBOL, and JCL (via the embedded Grove engine). Semantic depth varies by language and by the native toolchain available in the repository; COBOL and JCL are structural/heuristic only, with no published accuracy oracle yet. prism doctor reports the full per-language indexing/resolution tier and limitations breakdown (Grove's own capability manifest) under its languages key, alongside index/engine status.
prism serve --port 8888; see docs/HTTP_API.mdGrove is embedded in the Prism binary. Prism users do not need to install or run a separate graph service.
Prism analyzes the local working tree and stores its index locally. The default MCP transport is stdio. The optional HTTP server binds to loopback by default. See SECURITY.md and THREAT_MODEL.md for reporting and trust-boundary details.
See CONTRIBUTING.md, GOVERNANCE.md, and SUPPORT.md. Accuracy changes should include an oracle-backed regression case; public performance claims should link to reproducible evidence in provasign/research.
Apache License 2.0. See LICENSE.