Inventory known paths. No recursive crawl. Missing or unreadable layers remain visible.
THE CONFIGURATION TRACE, EXPLAINED.
Know exactly
which config
wins.
You changed the setting. Nothing changed.
Trace the observed winner back to its source — and see what got overridden along the way.
Local Rust CLI. Offline. Read-only configuration analysis.
For supported Claude Code and OpenCode settings.
Start with one command
configlens explain /model --client claude --client-version 2.1.296Project local replaces earlier file definitions.
Effective value withheld: coverage is partial.
2.1.296OpenCode 1.18.35Fixture-verified. Not runtime-conformant.01 / FOLLOW THE VALUE
One setting. Competing layers.
Follow the evidence.
Change a value. Remove a definition.
Watch the observed result move through the trace.
/modelClaude Code 2.1.296 · user → project shared → project localLOW → HIGH PRECEDENCESelect a source to inspect its definition.
Effective value withheld. Managed policy and server state are not observed here. This browser simulation covers only the fixture-verified /model scalar subset. It does not run the Rust CLI, inspect your machine, or establish upstream runtime conformance.
Different clients. Different rules. Claude environment variables are per-key pairs, not a universal precedence level. OpenCode uses an explicit project boundary in this example; its 2.x line is not supported.
02 / FROM FILE TO FINDING
A trace, not a hunch.
Four deliberate stages.
No client execution at any point.
Keep the file, line, and reason for each contribution — including the ones replaced.
Apply a supported, client-specific rule. Unknown semantics stay unknown.
Read the result alongside its evidence and coverage gaps. Partial is not effective.
Known paths → candidate sources
03 / LESS MYSTERY. MORE EVIDENCE.
Find the file.
Understand the result.
A focused diagnostic tool.
Not a configuration manager. Not a security certification.
Trace the losing values
The winning value is only half the story. Keep the definitions it replaced, with file and line provenance.
Inspect a contribution
project-model · $PROJECT/.claude/settings.json:2:12 · replaced_by_later_layer
Precedence, not folklore
Client-specific rules, not one universal merge. This demo focuses on the verified scalar /model subset.
Compare the file orders
Claude: user < shared < local. OpenCode: global < ancestor < nested (within the explicit project boundary).
Reports with receipts
Text for the terminal. Structured JSON for a report. Coverage gaps travel with the conclusion.
Inspect report fields
pointer: /model · status: partial · support: fixture_verified · effective_value: omitted
Redact by default
Protected values use a public projection. Unknown free text is not automatically safe to print.
See the privacy example
Only allowlisted values are reportable. Inspect the captured protected-value projection in the privacy section below.
Changes without guesswork
Compare compatible snapshots by value, provenance, and coverage. Two masks never prove equality.
Inspect a protected comparison
Protected values: comparison = unknown_redacted. Snapshots write only to explicitly requested output paths.
A small tool, not an agent
A local Rust CLI. No model calls, sockets, hooks, plugins, or client subprocesses at runtime.
See a first command
configlens explain /model --client claude --client-version 2.1.296
04 / THE ACTUAL CLI
Answers where
you work.
No account. No dashboard to maintain.
A report in the terminal you already have.
Captured from configlens 0.1.0-beta.3 against isolated synthetic files. No command on this page executes.
$ configlens explain /model --client claude --client-version 2.1.296 --cwd $SANDBOX/project --project-root $SANDBOX/project --input-context $SANDBOX/context.json --allow-read-root $SANDBOX --color never/model = "local-model" (observed) Observed winner: $PROJECT/.claude/settings.local.json:2:12 "local-model" observed_winner Losers: "user-model" $HOME/.claude/settings.json:2:12 replaced_by_later_layer "project-model" $PROJECT/.claude/settings.json:2:12 replaced_by_later_layer Rule: claude.scalar.layer-override Coverage: partial — cc.managed.hkcu — registry_not_read (expected_unobservable); cc.managed.mdm — platform_policy_store_not_read (expected_unobservable); cc.managed.server — remote_source_not_fetched (expected_unobservable); cc.managed.file — managed_file_absent_does_not_prove_policy_absent (managed_state_unknown) Support: fixture_verified; confidence: evidence_class:fixture_verified Conclusion: "local-model" wins among the observed applicable sources; effective value withheld. Next inspection: - supply the managed settings file with --input-context to include it - remote/MDM layers are not observable here; re-run where the managed source is readable
Output is real; paths are normalized. $SANDBOX replaces only the throwaway directory prefix. Commands retain all capture arguments; set up the sandbox before using them. Reproduce the captures ↗
05 / LOCAL BY PRINCIPLE
Your configuration
is not our business.
ConfigLens analyses files on your machine. It does not send configuration anywhere, run a client, or execute the things it finds.
- Configuration is read-only. Snapshot and explicit report outputs are intentional writes; diff reads the supplied reports.
- Share mode reduces identifying details. Redaction is not a guarantee of anonymity — review before sharing.
- Unix snapshots use owner-only permissions. Windows snapshots inherit the destination folder’s ACL; use a private directory.
Protection, made visible.
SYNTHETIC ONLYCaptured for /env/APP_TOKEN. The input below is a deliberately fake demonstration value.
{
"kind": "string",
"reason": "inventory_only",
"redacted": true
}Protected values compare as unknown_redacted, not “unchanged”.
06 / TAKE A CLOSER LOOK
Bring clarity
to your next config change.
PINNED PUBLIC BETA · v0.1.0-beta.3
A working prototype, not a stable release.
Binaries are unsigned; the macOS archive is not notarized. Review the release and checksum before running anything.
Verify your download
Download SHA256SUMS into the same directory. Compare the matching archive’s hash; stop on any mismatch.
sha256sum configlens-v0.1.0-beta.3-x86_64-unknown-linux-gnu.tar.gz
Compare with the corresponding line in SHA256SUMS. A checksum checks integrity, not publisher identity.
cargo install --locked --git https://github.com/ob4cl/configlens configlensSource install follows the repository default branch; it is not pinned to the beta archive.
YOUR FIRST TRACEconfiglens explain /model --client claude --client-version 2.1.296Use a supported client version claim. ConfigLens never runs a client binary to discover it.
All releases ↗ · Full installation guide ↗
Open source. Open about the limits.
Read the rules. Reproduce the fixtures. Help make the next explanation better.