Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Fux

A search index for your written knowledge — decisions, runbooks, specs, wiki pages — committed to git and read by agents.

Fux ranks documents from a small, plain-text index committed to git, then reads the answer back from the source itself. No server, no vector database, no API key, and no model anywhere on the path.

Status: 2.0.0 — released on PyPI and npm. The 2.x CLI and index format are what the next 2.x releases keep; a break waits for the next major. Every change is in CHANGELOG.md.

Why fux

  • Clone and ask. The index is committed under .fux/index/, so every clone — yours, a teammate's, CI's, an agent's — searches the same thing. Nothing to host.
  • Text you can review. One JSON line per document, sharded and sorted, so it diffs like code. A bundled git merge driver handles index changes from two branches.
  • Documents stay where they are. The index holds statistics, not content. answer reads the cited lines from the source and says whether they are still current.
  • Deterministic. Ranking is BM25F arithmetic (SR-RANKING). The same sources build the same index.
  • Says when it doesn't know. Results carry a confidence band, and an unrelated question gets "No confident matches" rather than the nearest noise (SR-CONFIDENCE).
  • It indexes documents, not code. Fux runs no parser over source files — no AST, no symbols, no call graph — and source extensions are not on its default type list. Pair it with a code-graph tool when you want structure.

The whole idea in one picture: work/architecture-high-level.svg. How a verb actually works: ask · answer · decoders. Python versus Node, component for component: two readers.

Install

pip install --pre fux-engine    # Python ≥ 3.11 · Linux, macOS, Windows

--pre is needed while fux is in alpha. The command is fux.

You can also read an index without Python. fux setup vendors a zero-dependency Node reader into .fux/node/ — one generated file, not fux's source tree — so a clone answers with nothing installed at all:

.fux/fux find rollback        # the shim: correct in every shape, so it is the one to use
npx fux-engine find rollback  # from npm, without a repository

It only reads — ingest, build and every other writing verb stay with Python — and it is held byte-equal to Python by a third arm of the differential law. In a monorepo fux setup detects the workspace instead and declares .fux/node as a member, so the reader comes from your lockfile; either way .fux/fux is the command.

And fux is importable, not only spawnable:

from fux import open as fux_open
fux_open(".").ask("how do we roll back a release")

Quickstart

$ cd your-repo
$ fux setup      # writes .fux/ and agent instructions; only creates missing files
$ fux ingest     # indexes what .fux/sources/dirs lists (setup seeds README.md and docs/)
ingested 2 docs (2 changed, 0 carried forward), 0 not indexed, 0 skipped, 2 shards written
accelerator: 31 terms, 31 blocks, 34 postings (derived, not committed)

$ fux ask "how do I roll back a release"
2.2044  Deploying the payments service  (docs/deploy.md)

$ fux answer "how do I roll back a release"
# Rollback
...
To roll back a bad release, run `make rollback` from the release branch.
The previous image tag is kept for 7 days.

  -- docs/deploy.md:L1-L6 (sha 18ac8c4e4d33, current)

$ fux ask --band "kubernetes autoscaling limits"
No confident matches.
confidence: none - nothing in the index scored for this query.

$ git add .fux fux.toml && git commit -m "Add fux index"

.fux/ explains itself: setup writes a .fux/README.md and a .gitignore that keeps the derived and fetched parts out of git (SR-DOTFUX).

Everyday commands

I want to… Run
Rank documents for a question fux ask "…"
Just the file paths, for piping fux find "…"
One answer, quoted from the source fux answer "…"
Machine-readable output add --json
A confidence band, or why it ranked fux ask --band "…" · fux ask --why "…"
Index another folder, file or URL fux add <path-or-url>
Mark a folder as history fux add old/2023-platform --archived
Stop indexing something fux remove <entry>, or a line in .fux/.fuxignore
Re-read sources and re-fetch URLs fux ingest — the same verb as the first time. --check only reports drift; --no-fetch stays offline
Follow links between documents fux explain <doc> · fux graph "…" · fux path <a> <b>
Explore around documents you name fux graph --seed <doc> [--seed <doc>…]
The same ranking from the words alone fux lexical "…" — BM25F, frozen; the baseline, not a better ask
Fix a wrong answer, durably fux correct "<the question people ask>" <the doc that answers it>
Re-index automatically on commit and merge fux hooks
A re-runnable answer receipt fux answer --receipt "…", later fux verify <receipt>
Check the setup fux doctor (read-only, offline)
See what the index looks like fux inspect — boilerplate words, documents no query can reach, duplicates, orphans

Full surface: fux --help and SR-CLI.

With coding agents

Agents are fux's primary reader.

  • Instructions out of the box. fux setup adds skills and instructions for Claude Code, Codex, GitHub Copilot and Kiro, plus a root AGENTS.md. They tell the agent to search the index before grepping and how to read a result. Skip with --no-agents (SR-AGENT-POLICY).
  • MCP. fux mcp serves the index over stdio as three tools: fux_search, fux_passage and fux_related. There is no answer tool — the agent is the answerer (SR-MCP).
  • Read the JSON, not the prose. --json and --band carry the fields an agent should branch on, including whether a result is archived (SR-ARCHIVED-CONTENT).

Beyond Markdown

  • File formats. Markdown, reStructuredText, AsciiDoc, Org and plain text, plus decoders for PDF, Word, PowerPoint, Excel, CSV/TSV, HTML, email, draw.io, JSON, YAML, TOML, INI, XML, SVG and images. The decoders are copied into .fux/decoders/ as your code, to edit or replace (SR-DECODE).
  • Web pages and wikis. fux add <url> fetches through a fetcher in .fux/fetchers/: http.py for a plain GET, or cdp.py (--cdp) to use the session your signed-in Chrome already holds. Both are yours to edit — and fetch=<name> on a URL line resolves to any .py you put in that directory, the same way .fux/decoders/ already works. A fetcher retrieves bytes and never converts them: the same line says decoder=<name> for the decoder that turns those bytes into Markdown, written once by fux add from the type it observed, so which decoder read a page is a committed line rather than whatever the server said that morning (SR-FETCHER, SR-URL-LIST).
  • Offline unless you ask. Only explicit, opt-in commands touch the network, and they say so on stderr (L4).
  • Sensitive text. .fux/pii.toml redacts matches from the committed index (SR-PII). fux setup writes it, and fux will not run without it. .fux/refusals.toml stops a sign-in wall being indexed as the page behind it (SR-REFUSAL).
  • Images and scans. Fux never calls a model. fux enrich plans the work for your coding agent and validates what it writes (SR-ENRICH).

Measured, not assumed

Claims ship with a pre-registered bar and a published run — including the ones that failed.

  • Speed. Warm ask --fast on 8,870 RFCs: worst-case p95 27.2 ms against a 150 ms bar (run, 2026-08-12, pre-2.0). The accelerator must return byte-identical results to the default scan.
  • Graph. 24/24 on a graded 66-document corpus; the derived graph hashes identically on x86-64 Linux and arm64 macOS (run).
  • Kept the failures. Pruning the index to top terms failed its gate (verdict). A dense embedding lane measured 0 fixed / 2 broken queries and was deleted in alpha.1.

Design rules

Fux is built under eleven laws, each with its own record in the SR register (SR-LAWS): L0 SRs are the source of truth · L1 $0, FOSS-only · L2 content never durable · L3 deterministic · L4 offline by default · L5 hashed meta · L6 say "index" · L7 Python ≥ 3.11 · L8 use record never committed · L10 build output, never source · L11 the sealed answer key is closed to Claude.

Reading order

  1. docs/index.md — the map of every doc in the repo
  2. The SR register — every decision of record
  3. Detailed architecture diagram — every plane, what is committed and what is not, and the two query paths
  4. The paper — the architecture of record, v1.0 (2026-09-14): what ships, what was measured, what was designed and not built, and the open work — with twenty diagrams
  5. Sibling environments — the sandbox, the measurement lab and the benchmark harness that sit next to this repo
  6. CLAUDE.md — how work is done here, for people and agents

Contributing

pip install -e ".[dev]" && pytest

Every change to an SR-owned component updates its owning record in the same commit; CI checks it. Start with CLAUDE.md.

License

MIT

Release files for fux-engine 3.0.0a2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fux-engine 3.0.0a2
File Size Uploaded
fux_engine-3.0.0a2.tar.gz 49.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for fux-engine 3.0.0a2
File Interpreter ABI Platform
fux_engine-3.0.0a2-py3-none-any.whl Python 3 none any Details

Total release size: 50.3 MB

Release files / fux_engine-3.0.0a2.tar.gz

Download URL fux_engine-3.0.0a2.tar.gz
Size 49.3 MB
Tags Source
SHA-256 checksum
How to use checksums
0d91845d2947b583742d8ebceafce99ff4a3437e4fe71c7a8083b032137860eb
BLAKE2b-256 checksum
How to use checksums
70998b4a5aca5fef7d7845b65388ef33fe45ad6c0154ec3074f7961d21ff200f
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 Sep 21, 2026.

Transparency log

Release files / fux_engine-3.0.0a2-py3-none-any.whl

Download URL fux_engine-3.0.0a2-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
17652cf1806dd8b5816971641b04861062ca86302065036a2533bc269c08d830
BLAKE2b-256 checksum
How to use checksums
c268ec39da6235e092b8789e8dc93e906ba0ab7846644b6fc8def4cc1d8c0338
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 Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.0.0a2 This release

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.37.1

2 release files

0.37.0

2 release files

0.36.0

2 release files

0.35.0

2 release files

0.34.0

2 release files

0.33.0

2 release files

0.32.0

2 release files

0.30.0

2 release files

0.26.0

2 release files

0.25.0

2 release files

0.24.0

2 release files

0.23.1

2 release files

0.23.0

2 release files

0.22.1

2 release files

0.22.0

2 release files

0.17.0

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page