Receipts — resume claim verifier & codebase-grounded interview prep CLI
Project description
RECEIPTS
Your resume said it. Your code proves it.
Quick Start • What It Does • How It Works • Providers • Setup Guide • Deep Dive
The anti-flattery resume tool. Most resume reviewers feed your bullets into an LLM and hand you back compliments. Receipts does the opposite — it embeds your actual codebase, searches it for evidence behind every claim you made, and tells you the truth. If the code doesn't back it up, you'll know before the interviewer does.
Quick Start
pip install codebase-receipts-cli
receipts check # verify provider is working
receipts ingest ./my-project # index your codebase
receipts verify resume.tex ./my-project # verify every claim
receipts verify resume.tex ./my-project --rewrite # + honest rewrites
receipts tui resume.tex ./my-project # full-screen dashboard
receipts ama resume.tex ./my-project # mock interview mode
receipts ledger # token usage & costs
[!TIP] See SETUP.md for the full walkthrough — provider config, model setup, and first-run instructions. See LEARN.md for how every piece works under the hood.
What It Does
Claim Verification
Every bullet in your .tex resume gets broken into individual claims —
percentages, counts, latency numbers, technology names — and each one is
checked against the code.
Results: 5 verified, 3 plausible, 2 unsupported
UNSUPPORTED CLAIMS:
[percentage] 40%
bullet: Reduced API latency by 40% through query optimization...
reason: No evidence of latency measurement or optimization in codebase
The rule: if the knowledge base has no relevant code for a claim, it's marked Unsupported without even asking the LLM. The model never gets a chance to talk itself into justifying something it can't find.
Honest Rewrites
Weak bullets get rewritten to be exactly as strong as what the code can actually justify. No invented numbers. No inflated language.
ORIGINAL: Reduced API latency by 40% through query optimization
REWRITTEN: Optimized database queries in the API layer using indexed lookups
Keyword Gap Analysis
Paste a job description. Get back what's addable, what's ungrounded, and what's missing:
Can add (code supports it):
+ Docker — Dockerfile and compose config found in codebase
Ungrounded (resume claims, no code):
? Kubernetes — mentioned in resume but no k8s config in codebase
Gaps (JD wants, you don't have):
- Terraform
Interactive TUI
A full-screen terminal dashboard with a file tree, sortable claims table, side-by-side rewrite diffs, live LLM activity log, and a running token counter.
| Shortcut | Action |
|---|---|
c |
Claims tab |
r |
Rewrites tab |
l |
Log tab |
q |
Quit |
Mock Interview (ama)
An AI interviewer that targets your weakest bullets. Unsupported claims get asked about 3x more often than verified ones. For each bullet:
- Pointed technical question about the specific claim
- Your answer
- Natural follow-up based on what you said
- Your follow-up answer
- Assessment: did it hold up?
Ends with a summary of strengths, weaknesses, and overall readiness.
Token Ledger
Every LLM call is metered and logged — even when the provider is free.
receipts ledger shows lifetime totals across all sessions.
How It Works
receipts/
cli.py ........................ Typer CLI: check, ingest, verify, tui, ama, ledger
config.py ..................... BYOK config (env vars / .env, never committed)
ama/
interviewer.py .............. Mock-interview loop, weighted toward weak claims
ingest/
scanner.py .................. Tree-style walk respecting .gitignore
git_source.py ............... Clone remote repos to temp dir
artifact_extractor.py ....... Tree-sitter extraction within a token budget
secrets_scanner.py .......... Pre-embedding secrets scan + redaction
ledger/
token_ledger.py ............. SQLite-backed token/cost log
pricing_table.py ............ $/1K-token rates per provider/model
llm/
provider.py ................. Abstract LLMProvider (complete, embed)
factory.py .................. Reads config, returns the active provider
ollama_provider.py .......... Local, free, no key needed
gemini_provider.py .......... Free-tier Google AI Studio key
anthropic_provider.py ....... BYOK adapter (paid)
openai_provider.py .......... BYOK adapter (paid)
fake_provider.py ............ Deterministic offline stub for tests
resume/
tex_parser.py ............... Parse .tex into structured sections/bullets
claim_extractor.py .......... Extract numeric + technology claims per bullet
tui/
app.py ...................... Textual App with panelled layout
widgets/ .................... StatusBar, ClaimsTable, DiffView
verify/
kb.py ....................... ChromaDB-backed vector store over code artifacts
verifier.py ................. Classify: Verified / Plausible / Unsupported
rewriter.py ................. Propose honest rewrites for weak bullets
keyword_gap.py .............. JD keyword gap analysis grounded in code
[!NOTE] For a narrative walkthrough of every module — what it does, why it exists, and how to explain it in an interview — see LEARN.md.
Provider Support (BYOK)
| Provider | Default | Key | Install |
|---|---|---|---|
| Ollama | Yes | None | Built-in |
| Gemini | No | Free | Built-in |
| Anthropic | No | Paid | pip install codebase-receipts-cli[anthropic] |
| OpenAI | No | Paid | pip install codebase-receipts-cli[openai] |
Zero bundled keys. Zero silent paid API calls. Ever.
[!IMPORTANT] Anthropic does not offer an embeddings API, so Claude needs a split config — chat via Claude, embeddings via a provider that has them:
RECEIPTS_PROVIDER=anthropic+RECEIPTS_EMBED_PROVIDER=gemini(orollama). The embed provider must match whatever embedded your knowledge base — re-ingest if you switch embedding models.
Development
uv sync --group dev # install everything
uv run pytest -v # 233 tests, fully offline
uv run ruff check receipts/ # lint
uv run black --check receipts/ tests/ # format check
uv run pre-commit install # git hooks
The entire test suite runs with zero network access — a deterministic fake provider handles all LLM calls in tests.
Publishing
git tag v0.1.0
git push origin v0.1.0
GitHub Actions runs the full test suite on Ubuntu + Windows (Python 3.10 + 3.12), then publishes to PyPI via trusted publishing. No tokens in secrets.
License
Built by Ishaan Sharma
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file codebase_receipts_cli-1.0.1.tar.gz.
File metadata
- Download URL: codebase_receipts_cli-1.0.1.tar.gz
- Upload date:
- Size: 569.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca833edda856eed7392cb526ce335d2996709303eb1200e3d99d4ee679a491ac
|
|
| MD5 |
c0f6a47d709fc4ffee78cf1049e0dabf
|
|
| BLAKE2b-256 |
cc0d9fe900b2532095ba46b4e66dc817e97837a87eae8de9546074837c2a6871
|
Provenance
The following attestation bundles were made for codebase_receipts_cli-1.0.1.tar.gz:
Publisher:
publish.yml on Ishaan-1606/receipts-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
codebase_receipts_cli-1.0.1.tar.gz -
Subject digest:
ca833edda856eed7392cb526ce335d2996709303eb1200e3d99d4ee679a491ac - Sigstore transparency entry: 2193505184
- Sigstore integration time:
-
Permalink:
Ishaan-1606/receipts-cli@598665e0f4a10c1cfea1a2e61b51f0341051fad3 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/Ishaan-1606
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@598665e0f4a10c1cfea1a2e61b51f0341051fad3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file codebase_receipts_cli-1.0.1-py3-none-any.whl.
File metadata
- Download URL: codebase_receipts_cli-1.0.1-py3-none-any.whl
- Upload date:
- Size: 166.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f5551514737cf5b9434217f23170fa44d61c907d5d31eecfd307359dab8ea14
|
|
| MD5 |
fc0e47ade47491a605b7665c0361261b
|
|
| BLAKE2b-256 |
28cd1eeb17abda82eb602a76ec13e8e244be23f2ac2be91118124a76b6d1f999
|
Provenance
The following attestation bundles were made for codebase_receipts_cli-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on Ishaan-1606/receipts-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
codebase_receipts_cli-1.0.1-py3-none-any.whl -
Subject digest:
0f5551514737cf5b9434217f23170fa44d61c907d5d31eecfd307359dab8ea14 - Sigstore transparency entry: 2193505188
- Sigstore integration time:
-
Permalink:
Ishaan-1606/receipts-cli@598665e0f4a10c1cfea1a2e61b51f0341051fad3 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/Ishaan-1606
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@598665e0f4a10c1cfea1a2e61b51f0341051fad3 -
Trigger Event:
push
-
Statement type: