This release is a pre-release and may not be stable for production use.
Fux
Deterministic knowledge retrieval for AI-assisted codebases — rank from a small git-carried index, fetch content from the systems that own it, verify at answer time.
Status (2026-08-24):
fux-engine2.0.0-alpha.0 on PyPI — the record shape moves tofux.index.v2. M2 through M5 (accelerator, graph lane, refer plane, maintenance hooks) are in; this release adds five-field BM25F, per-source tuning (.fux/tune.toml), proximity reranking,fux enrichandfux mcp. From any repo:fux setup # writes the files you own, write-if-missing fux ingest # builds the committed .fux/index/*.jsonl (+ the accelerator) fux ask "your question" # ranks with BM25F, cites the source file fux find "your question" # ranked locations, one per line fux answer "a question" # the single best answer the index can giveWhat fux indexes is two committed files, not config.
.fux/sources/dirsand.fux/sources/urls, one entry per line, on one grammar — so a 5 000-entry corpus diffs and merges line by line, and the loader sorts so file order can never change a committed byte. Warmaskis measured at a worst-case p95 of 27.2 ms on 8 870 RFC documents — against a pre-registered 150 ms bar, where the reference scan takes 4.2 s (prediction R3 PASS, the run).The speed comes from a derived index under
.fux/runtime/— never committed, rebuilt from the committed shards byfux build. It is bound by a differential law: its results are byte-identical to the reference scan's, asserted over thousands of comparisons rather than spot-checked.ask/find/answerscan by default (no build step needed); pass--fastto opt into the accelerator when one exists and is fresh — same results, faster (Arpit, 2026-08-21).--scanstill forces the reference path explicitly, for bug reproduction.There is no dense lane and no bundled model (2026-08-25). One existed behind
ask --hybrid, shipped off by default, and was deleted after its own gate measured 0 fixed / 2 broken — the bundled embedding mean-pooled static token vectors, so it was as order-blind as the lexical scorer it was meant to complement. Removing it took the wheel from 6.84 MB to 233 KB. Ranking is unchanged; the flag is gone.The corpus is maintained with
fux add/fux remove/fux update(2026-08-21), over directories, single documents and URLs alike — the entry picks the list.addingests by default;removetakes a document out of the index and the graph, deleting its line or subtracting it from a listed ancestor;updatere-reads what is listed and never writes a line. They replacefux urlandfux ingest --refresh-urls(ADR-CLI).URLs join the corpus through a consumer-owned fetcher file.
fux setupwrites two —http.py(a plain stdlib GET, the default) andcdp.py(Chrome DevTools Protocol, also pure stdlib) — into.fux/fetchers/, where they become your code and fux never rewrites them. Add one withfux add <URL> [--cdp] [--plain], which records the line and fetches that one URL. That andfux updateare the engine's two networked paths; both say on stderr that they went out, and everything else is offline. A line picks its own fetcher; nothing escalates automatically (ADR-URL-LIST · ADR-FETCHER). The graph lane has landed (M3, released in0.34.0) —explain/graph/path, unseeded label-propagation communities, a lazy PPR walk (ADR-GRAPH). Both acceptance gaps are closed (2026-08-22): 24/24 on a graded 66-document corpus, and the derivedgraph.jsonhashes identically across two independent architectures (the run).Archived content says so, and the ranking does not move. A source declared
archived=truecarriesarchived: trueon every verb, an[archived]marker inask's text, and a stderr disclaimer — while results stay byte-identical unless[ranking] archived_weightis set below its1.0default (ADR-ARCHIVED-CONTENT).The v0.26 engine and its docs are archived under
archive/v0.26/, reference-only. The new architecture is specified inwork/paper/the-fux-index-paper.md(§4–§6 knowingly stale until M6) and built against the ADR register.The pruning gate closed (2026-08-09): FAIL. Keeping only each document's top-k terms was measured, twice, against a corpus that could actually test it — no selector came within 35.9 points of preserving candidate recall at a 6 % budget. The committed index carries full postings, permanently — P1-RERUN.
The idea
- Sources own content. Repo docs stay in git; Confluence pages stay in
Confluence. Fux never keeps a durable copy (except explicit per-source
snapshotpolicy). - Git carries the index — doc-major, sharded, human-readable JSONL;
full per-document postings, an extracted link graph, and a source ledger,
one line per document, sorted and content-sharded so
git itself diffs and merges it —
work/compare/index-format.compare.md. - Answers verify themselves. Rank in the index, fetch the cited
documents live (through a version-keyed cache), re-score passages on the
fetched bytes, cite the fresh sha. (The refer plane is M4; M1's
askcites straight from the committed index.) - Laws: $0 default · stdlib-only · byte-deterministic · offline by default · one ADR per feature, every rule referenced.
The .fux/ directory
Everything fux puts in your repo lives here, and every child is declared as committed or derived (ADR-DOTFUX):
| entry | kind | what it is |
|---|---|---|
index/ |
committed | the sharded JSONL index |
sources/ |
committed | the source lists — dirs and urls, one entry per line |
fetchers/ |
committed | your code (http.py, cdp.py) — written by fux setup, never rewritten |
runtime/ |
derived | M2's accelerator segments, and M4's TTL fetch cache nested at runtime/fetch-cache/ (gitignored, CACHEDIR.TAG) |
Scaffolding has two moments. Every fux ingest writes .fux/README.md
and a narrow .fux/.gitignore (derived names only, never *) if they are
missing, and never touches them again — a fresh clone has to be correct before
a byte is written. fux setup is the one that writes code: the fetchers and
the source lists, explicitly, once. Ingest never puts a fetcher in a repo
that only wanted an index.
fux doctor fails if the index has been git-ignored and warns about anything
undeclared.
Reading order
work/paper/the-fux-index-paper.md— architecture + falsifiable predictionswork/compare/index-format.compare.md— the committed format, measured- the ADR register — milestones M0–M8
archive/adr/0004_index-format.md— the frozen M1 schema, named here for orientation only (archive is not evidence — seearchive/README.md)../fux-playground/PLAYGROUND.md— a graded 10-doc corpus to try it on, in a separate sibling repository (clone it next to this one)work/WORKLOG.md— the running build log
License: MIT.
Release files for fux-engine 2.0.0a2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fux_engine-2.0.0a2.tar.gz | 4.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fux_engine-2.0.0a2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.8 MB
Release files / fux_engine-2.0.0a2.tar.gz
| Download URL | fux_engine-2.0.0a2.tar.gz |
|---|---|
| Size | 4.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
79148264723781297bbb3a1a069bb82b24999573ceced372a8587c195bbe8965
|
|
BLAKE2b-256 checksum How to use checksums |
de1d968f8d72019c0cee85a8dbb6946bdc7edc0502d0fba7f5bfd65c14826d47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.
Transparency logRelease files / fux_engine-2.0.0a2-py3-none-any.whl
| Download URL | fux_engine-2.0.0a2-py3-none-any.whl |
|---|---|
| Size | 258.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c03533f26326d671576e56c962a79b80a710d0ef1c71ecc2f9f9cc1c73dbf5c8
|
|
BLAKE2b-256 checksum How to use checksums |
1308f1685eb5b44250cc547b8733a9d80d34fd85b8ea241fb7c48a19d9516f01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.
Transparency log