Skip to main content

Search that agrees with itself: structure ⊗ text ⊗ meaning, glued at one location by coherence-R, with matryoshka embeddings for speed.

Project description

ix-search

ast-grep × grep × meaning. Three searches, glued at one spot, with a confidence score.

# pip install ix-search — coming to PyPI; this works today:
pip install git+https://github.com/Intuition-Labs-LLC/ix-search
ix "the part that retries on failure"

ix — three readings glue into one R-scored result

That's the whole thing. You already know ast-grep (structure) and grep (text). ix runs both — plus a meaning search — glues the three at the same place, and gives every hit an R: how sure it is, because they agreed.

ix · structure ⊗ text ⊗ meaning, glued by R

  R 1.00  net.py:42    def retry_with_backoff(...)    [ast-grep·grep·meaning]   ← all three agree
  R 0.51  http.py:88   except ConnectionError: ...    [grep·meaning]            ← two agree
  R 0.26  util.py:12   # exponential backoff helper   [meaning]                 ← a stretch, flagged

R = 1 when ast-grep, grep, and meaning land on the same line. Lower when only some do. It's confidence from agreement — not a black-box cosine.

Zero effort

  • No API key, no GPU, nothing leaves your machine. Meaning runs on model2vec static embeddings (~30 MB, CPU).
  • For an agent: ix "..." --json{path, line, R, agreed} per hit, so it acts on confidence (take R ≈ 1, escalate R < 1) instead of guessing.
from ix_search import search
for h in search("retry on failure", "."):
    print(h.R, h.path, h.line, h.agreed)

Why it's more than grep

  • Three readings glue. Lexical, structural, and semantic search are three views of one location; ix overlays them and scores the agreement. The hit where all three land is the one you want — and the semantic-only stretch is flagged, not hidden.
  • Matryoshka = speed. The embeddings are nested (a prefix is a smaller embedding), so ix does a fast coarse pass on a truncated vector, then unfolds to full dim only on the survivors. (--dim tunes it.)

The idea behind it

ix is the runnable instance of The Matryoshka Sheaf — local readings glue into one global result exactly when they agree, with R = exp(−d_tail/scale) as the gluing obstruction.

Needs ast-grep and ripgrep on PATH (the meaning search works without them).


AGPL-3.0-or-later · Intuition Labs

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

ix_search-0.1.0.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

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

ix_search-0.1.0-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

File details

Details for the file ix_search-0.1.0.tar.gz.

File metadata

  • Download URL: ix_search-0.1.0.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ix_search-0.1.0.tar.gz
Algorithm Hash digest
SHA256 846442908711ecd07e8d989f20d41e2ce2d611196c2be91687212b68af51f3d3
MD5 3f00392f877364ff6cfe29817e7d535e
BLAKE2b-256 06d353b263e5d288353a843171ee4913a3411cf52bf18cfa6a23de4a08c30ca6

See more details on using hashes here.

File details

Details for the file ix_search-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ix_search-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ix_search-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 20bfa57d22ebedc7baffa96422da847a30ee47e8badfff1fb3d2d737530599ea
MD5 8bf158c41eee08f0ddb3cfd104b226f9
BLAKE2b-256 8608fe64b9808f09560db74d15731bd021f42e36e336bfbf3ba4d8ac71747253

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