FixDoc
Your agents stop repeating incidents.
FixDoc is an incident knowledge store your AI agents query over MCP. Validated fixes, playbooks, and environment insights go in; ranked, token-budgeted context comes out. Knowledge lives as markdown files in a git repo you own — delete FixDoc any time and everything stays readable.
Five-minute start
uv tool install "fixdoc[embed]" # or: pipx install "fixdoc[embed]"
cd your-infra-repo
fixdoc init # scaffold + MCP config + agent instructions
Open your agent (Claude Code, Cursor, any MCP client), approve the fixdoc
server once, and hit an infrastructure error: the agent checks the knowledge
base before debugging from scratch.
Seed the knowledge base (day 0)
Two moves take a new store from empty to useful:
1. The interview — highest value first. Open your agent in the repo and say: "interview me: ten facts about our environment every new engineer learns the hard way, plus our five worst incidents — record each one." The agent asks the questions and writes the entries; you review the quarantine afterwards.
2. Import the documents you already have:
fixdoc ingest ./runbooks ./postmortems
- Markdown documents with a resolution-type section (Fix, Mitigation, Resolution, Remediation, Workaround, ...) become quarantined entries. Sections map by heading: Summary/Impact → Symptom, Root Cause → Root cause, Verification → Verification. Docs with three or more numbered steps become playbooks automatically.
- Anything a document never stated becomes a visible "(add during review)" placeholder — nothing is invented. Documents with no resolution content are skipped: they're notes, not knowledge.
- Secrets are redacted before anything is written (AWS keys, private-key
blocks, JWTs, bearer tokens,
password=-style values) — the store is a git repo you'll push, so nothing sensitive may enter it. - Volume is capped:
--limit(default 200, max 1000) keeps the highest-substance candidates; re-run after reviewing a batch to drain the next wave (re-runs never duplicate).--dry-runpreviews without writing. - Logs are deliberately not ingested: errors carry no remediation. Knowledge comes from documents, threads, and people.
Then review each new entry — fill the placeholders, change
status: quarantined to status: validated (normally via pull request) —
and it becomes retrievable.
How it works
Four MCP tools are the entire agent surface:
| Tool | What it does |
|---|---|
search_fixes |
Validated knowledge for a symptom, ranked by relevance and proof |
record_fix |
Write a new fix — it lands in quarantine for human review |
confirm_fix |
Report that a retrieved fix worked (raises its trust) |
get_fix |
Fetch one entry in full by id |
Everything an agent writes starts quarantined and is invisible to retrieval
until a human promotes it to validated — normally a pull request review.
There is no delete or admin tool by design.
The store
.fixdoc/config.yaml # spec_version, embedding model
knowledge/
<namespace>/ # per-team dirs; CODEOWNERS decides who validates what
fx_7c2a91e4.md # one entry per file, filename = id
.fixdoc-index/ # derived (SQLite + embeddings), gitignored, rebuildable
Entries are YAML frontmatter + markdown sections (Symptom / Root cause / Fix /
Verification). Search embeds the symptom; results return the fix. Embeddings
run fully local (bge-small-en-v1.5 via fastembed) — no account, no network
call in the query path.
Where things stand (v0.1.0)
Working and verified today: the four MCP tools end to end with a live agent,
semantic retrieval with trust-weighted ranking and token budgets, the
quarantine write path with dedup, the events log, local embeddings, and
fixdoc init. Next up, in order: day-0 ingestion (feed logs and postmortems
in, get a classified, secret-redacted, quarantined store out), Slack/Jira/
ServiceNow/Notion importers, the ops surface (status, promote, doctor),
and the eval harness.
Developing
make setup # venv + editable install (dev + embed)
make test # unit suite
make e2e # end-to-end with real embeddings
make lint fmt
Design docs live in docs/specs/. The engine is src/fixdoc/core/
(models, dedup, index, retrieval, record, events); the MCP server is
src/fixdoc/mcp_server.py.
License
MIT
Metadata
Release files for fixdoc 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fixdoc-0.1.0.tar.gz | 43.6 kB | Without provenance | Details for fixdoc-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fixdoc-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for fixdoc-0.1.0-py3-none-any.whl |
Total release size: 78.3 kB
Release files / fixdoc-0.1.0.tar.gz
| Download URL | fixdoc-0.1.0.tar.gz |
|---|---|
| Size | 43.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
be689a6a809ebc00313be1a7e4acdbca51a1c1c0b00983ea088fef83ffe71b0a
|
|
BLAKE2b-256 checksum How to use checksums |
971a70310a34bd9692b0f1435391443c77eb98a5f9e66873e4ef0b32aac1bf2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / fixdoc-0.1.0-py3-none-any.whl
| Download URL | fixdoc-0.1.0-py3-none-any.whl |
|---|---|
| Size | 34.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d3e5e329fa68dcbf0757237c269715fdf9b1a4fe4959e4105bd1974cb03a7149
|
|
BLAKE2b-256 checksum How to use checksums |
9f3354dda8422a0c1e902524df87b54ab814de2b7f9f0b06f8fa58419c6cf83b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Security for fixdoc 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.