Git diff shows word changes.
SemShift flags risky meaning changes.
Catch likely silent meaning drift in AI-edited prompts, docs, policies, resumes, and research drafts — before it gets merged.
Meaning-level diff
See drift in claims, tone, and commitments — not just changed characters.
Local-first
Local-first by default. TF-IDF runs locally; optional embedding models may download weights on first use.
PR-native
One-line GitHub Action drops drift detection into every pull request review.
Six review modes
Targeted heuristics for policy, prompt, README, research, resume, and default text.
AI rewrites can look clean
while becoming dangerous.
AI tools polish grammar, tone, and clarity — but they can silently weaken promises, remove constraints, inflate claims, or rewrite the meaning of a sentence while keeping it perfectly readable.
Two views of the same change.
Git tells you which characters moved. SemShift tells you whether the meaning of the document moved with them.
git diff
text level- Same diff for typos and semantic rewrites
- No notion of claim strength or tone
- Reviewer interprets meaning manually
semshift
● meaning level- Explains the meaning shift in plain language
- Flags claim, tone, and risk drift
- Six mode-specific reviewers built-in
- Runs alongside your CI as a PR gate
One command. A structured drift report.
Point SemShift at the old and new versions of any document. Pick a mode. Get back a structured review report your team can inspect.
Built for the documents
that actually matter.
Six focused modes for the text where a quiet AI rewrite is most expensive — and most likely to slip past a regular code review.
Prompt safety
--mode promptCatch silent edits to system prompts that loosen safety rules, change refusal behavior, or alter persona.
Policy review
--mode policyFlag changes to privacy, terms, and compliance docs where commitments and obligations live in single words.
Research drafts
--mode researchSpot claim inflation, removed hedges, and shifts from correlation to causation in papers and abstracts.
README integrity
--mode readmeWatch for changes to compatibility statements, support guarantees, and licensing notes that misrepresent your project.
Resume claims
--mode resumeDetect AI "polish" that quietly upgrades responsibilities, inflates numbers, or invents seniority and ownership.
Default mode
--mode defaultNo domain assumptions. General-purpose drift detection across tone, claim strength, and structural meaning shifts.
Add meaning checks
to every pull request.
Drop SemShift into your existing GitHub workflow. Reviewers get a structured comment on the PR before they read a single line of the diff.
Five steps, all local-first.
SemShift runs on your machine or your CI runner. No documents leave your environment unless you explicitly configure external services. Optional embedding models may download weights on first use.
Chunk
Split both versions into semantically coherent chunks.
Align
Match each old chunk to its most similar new counterpart.
Compare
Use lexical TF-IDF or optional embeddings to estimate drift signals.
Detect
Surface claim, tone, and risk shifts using mode-specific rules.
Report
Emit a Markdown or JSON report you can review or fail CI on.
A focused lens
for each kind of document.
Modes tune the chunking strategy, similarity thresholds, and the kinds of drift SemShift cares about. Pick one with --mode <name>.
General-purpose drift detection. Tone, hedging, and claim-strength shifts across any prose.
Watches privacy, terms, and compliance language for weakened commitments and new stakeholders.
Targets system prompts. Flags removed safety rules, altered refusals, and persona drift.
Checks compatibility, support, and licensing claims that quietly narrow or expand.
Detects hedge removal, sample-size loss, and "suggests → proves" escalations in drafts.
Catches inflated numbers, upgraded titles, and ownership claims introduced by AI polish.
Three ways to run SemShift.
Use it on your laptop, embed it in your Python pipeline, or wire it into your GitHub workflow. Setup takes about 60 seconds.
Built for human review,
not to replace it.
SemShift is opinionated about a small thing: surfacing meaning changes. It stays out of the way on everything else.
Open-source
MIT-licensed Python. Read the rules, fork the modes, audit the scoring. No black-box judgments.
Local-first
TF-IDF runs locally. Optional SentenceTransformer embeddings run locally after model weights are downloaded.
CI-friendly
Deterministic exit codes, warn-only mode, JSON and Markdown reports, configurable fail_on thresholds. Built to plug in.
Transparent reports
Every flag includes the chunks compared, the score, and the rule that triggered it. No hidden reasoning.
Reviewer assist
Designed to make a human reviewer faster — not to autonomously approve or block documents.
For the AI era
Tuned for text that has been touched by an LLM — where surface looks fine but meaning may have moved.
Stop reviewing only words.
Start reviewing meaning.
One pip install. One CLI command. A meaningful guardrail against silent AI rewrites.
SemShift detected high-risk prompt drift. A safety instruction appears to have been removed or weakened in this PR.
+ Provide helpful guidance when relevant.
The mandatory refusal rule has been converted into a soft suggestion. This change affects the system's safety posture and should be reviewed manually.