
briefd
io.github.ismailperim由 GitHub 帳號 ismailperim 發布v0.6.1更新於 Oct 24, 2026
Git-backed team knowledge compiled into token-budgeted context bundles for coding agents
概覽
自架、以 Git 為後端的團隊知識編譯器,透過 MCP 向編碼代理提供受 token 預算限制的上下文包。
- 可以做什麼
- 依任務在 token 預算內編譯去重的上下文包,可限定專案範圍與程式碼路徑
- 檢索知識庫中排序後的章節,並完整讀取單一文件
- 列出各範圍及其文件與章節數量
- 以可審查的分支或合併請求形式提出知識更新,不直接更動索引
- 回報哪些章節對上下文包有幫助,並找出文件間缺少或失效的連結
- 適用情境
- 適合把術語、業務規則、慣例與架構決策寫在 Markdown 中、目前靠貼進代理指令檔案的團隊。它讓編碼代理只取得與當前任務相關的章節,並向維護者顯示過時或缺少的知識。
- 執行需求
- 以本機程序執行:Go 執行檔或已發布的 Docker 映像,知識來源為 Git 儲存庫或掛載的 Markdown 目錄。必須設定 BRIEFD_SOURCE。HTTP 模式要求用戶端在 Authorization 標頭中帶 bearer 權杖(BRIEFD_API_TOKEN);存取私有 HTTPS 遠端儲存庫需要 BRIEFD_GIT_TOKEN。首次執行會下載約 470 MB 的嵌入模型,除非停用嵌入。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 briefd,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
briefd
Your agents, briefed. Not flooded.
A self-hosted context compiler for AI coding teams: git-backed knowledge, served to coding agents
as token-budgeted context bundles over MCP.
[CI] [Security] [Release] [Go version] [License] [Container] [MCP Registry] [Glama score] [M8ven Score]
[Today: CLAUDE.md is re-sent on every turn. With briefd: one compile_bundle call returns ~1,800 tokens. Result: 86% fewer knowledge tokens per task.]
▶ Watch the 90-second explainer · How it works · Quickstart
Teams that build many projects in one domain keep the same knowledge in their heads and in
scattered CLAUDE.md / AGENTS.md files: terminology, business rules, architecture decisions,
conventions. Loading all of it into every session burns thousands of tokens on every turn, and
whatever doesn't fit gets left out.
briefd inverts the model: context on demand, not up front. Your knowledge lives as Markdown in a git repository. briefd indexes it and answers one question from your coding agent — "what do I need to know for this task?" — with a compiled, deduplicated bundle that never exceeds the token budget you set.
Why
[Bar chart: knowledge tokens per task. Everything in CLAUDE.md 12,869 tokens, answer present 100%. Curated CLAUDE.md 4,946 tokens, 43%. briefd compile_bundle at 2000 max tokens: 1,800 tokens, 96%. At 1000: 889 tokens, 96%.]On the sample knowledge repo in this repository (44 documents, 47 realistic developer tasks),
compile_bundle spends 86% fewer tokens per task than pasting everything into CLAUDE.md
while still containing the section that answers the task 96% of the time (98% with the
English-only all-MiniLM-L6-v2 model, the figure the explainer video quotes). The realistic
middle ground — a hand-curated CLAUDE.md with just conventions and the glossary — costs
2.8× more than a bundle and has the answer less than half the time.
Reproduce it with make bench; the method is in internal/eval/bench.go.
That is what the tokenizer says. Inside real Claude Code sessions
(eval/session/, Sonnet, 10 tasks, same prompts) briefd cut the context
carried per turn by 35% and the cost per task by 40% with identical answers — at the price of
3–4 extra tool-call round trips per task. The saving grows with the size of your knowledge repo;
a static CLAUDE.md cannot.
Not another agent memory
Memory tools (agentmemory, Mem0, claude-mem) record what an agent observed in its sessions, automatically, per user. briefd serves what the team decided, written by people and reviewed like code. They answer different questions and run side by side.
Use a memory tool so your agent remembers what it tried last week. Use briefd so every agent on the team applies the same rules — and so someone notices when a rule falls behind the code.
How it works
[How briefd works. Ingest: knowledge repo → chunker → SQLite → embeddings in pure Go. Serve: coding agent → MCP/REST → hybrid retrieval → budget packer → MCP/REST → agents]- Git is the source of truth. The index is a disposable cache rebuilt from a clone.
- Agents never write to the index.
propose_updateopens a reviewable branch/PR; what briefd serves changes only when a human merges. - Hybrid retrieval, no external services. SQLite FTS5 (BM25) + multilingual embeddings
(
multilingual-e5-small, 100+ languages) computed by a pure-Go encoder, fused with reciprocal rank fusion. No Postgres, no vector database, no ONNX runtime, no CGO. - Hard token budgets. Every API that returns context takes
max_tokensand never exceeds it.
Quickstart
Try it in 30 seconds — no repository needed:
Then open the dashboard, or point an agent at it: claude mcp add --transport http briefd http://127.0.0.1:7788/mcp.
The first run downloads the embedding model (about 470 MB); briefd demo --embeddings none skips it.
With your own knowledge:
Open http://localhost:7788/ for the dashboard, then ask Claude Code something the sample
corpus knows — "what's our retry policy for acquirer calls?" or "ters ibraz nedir?" — and
watch search_context / compile_bundle show up in the request log.
Any MCP client that speaks streamable HTTP works. For a project-level .mcp.json:
Let the agent install it. Hand your coding agent one instruction:
Retrieve and follow the instructions at: https://raw.githubusercontent.com/ismailperim/briefd/main/INSTALL_FOR_AGENTS.md
Teach the agent when to ask. Tools an agent does not call save nothing. The
skills/briefd skill tells Claude Code (and any agent that reads
SKILL.md) when to compile a bundle, how to treat a stale section and when to propose an
update; the same guidance as a CLAUDE.md paragraph is in deploy/local/CLAUDE.md.
Single-user, no server? briefd mcp speaks MCP over stdio — the same tools, the same
index, no port and no token. Claude Desktop, Cursor's stdio config and MCP directory
inspectors launch it directly:
Use serve when a team shares one instance (dashboard, metrics, webhook, REST); use mcp
when the agent runs on the machine that holds the checkout.
Tools
The same operations are available over REST (/api/search, POST /api/bundle, /api/docs/{path},
/api/scopes, POST /api/proposals, POST /api/usage, /api/gaps, /api/health, /api/stats)
behind the same bearer token.
Your knowledge repo
briefd expects a git repository (or directory) of Markdown with three kinds of folders
(briefd init <dir> scaffolds it with example documents):
Documents are split on ##/### headings into sections of roughly 200–800 tokens with stable
ids, so a section can be quoted on its own. Optional front matter adds metadata:
testdata/knowledge/ is a complete example (a fictional payments
platform) and doubles as the evaluation corpus.
Obsidian vaults and links
A knowledge repository can be an Obsidian vault. briefd reads [[wikilinks]] in the text and in front-matter properties such as related: (including
[[note|alias]] and [[note#heading]]) and relative Markdown links, resolves them the way
Obsidian does (by path, or by file name anywhere in the repository), and builds a link graph:
the dashboard draws it, get_document returns each document's links and backlinks so an agent
can follow them, and orphans (nothing links here) and broken links (the target does not exist)
are listed as maintenance signals next to gaps and coverage. Folder scopes still apply —
domain/, conventions/, projects/<name>/ — so keep the vault's top level in that shape.
Running it for real
briefd clones the repository, follows the branch with fetch + hard reset every sync.interval
(default 60 s), or immediately when your forge calls POST /webhook/git with a GitHub-style
HMAC signature. Only changed files are re-parsed and re-embedded.
Languages. The default embedding model, multilingual-e5-small, covers 100+ languages,
so a Turkish, German or Japanese knowledge repo — or English docs queried in another language —
works out of the box. English-only teams can set embeddings.model: all-MiniLM-L6-v2 (87 MB,
~2.5× faster indexing). briefd model pull pre-fetches a model for offline or image-build use;
--embeddings none gives BM25-only mode; Ollama and OpenAI-compatible services are alternative
providers.
Docker
The image is distroless and pure Go (~34 MB, linux/amd64 + arm64). Database, checkout and model
live in the briefd-data volume. Mount a directory and set BRIEFD_SOURCE=/knowledge to serve
local files instead.
Deployment guide: deploy/README.md covers Compose and systemd
setups, git forges (GitHub, GitLab, Azure DevOps, Bitbucket, SSH), installing the embedding model
offline, proxies and private CAs, exposure/security, upgrades and monitoring. For a laptop-only
setup see deploy/local/.
Configuration — briefd.yaml (see deploy/briefd.example.yaml)
or BRIEFD_* environment variables; flags override both. The ones you will actually touch:
briefd model pull pre-fetches the embedding model for offline or image-build use.
Dashboard and metrics
[briefd dashboard overview: requests, tokens served and saved, index and sync figures; the knowledge graph with recently served documents stamped; the circulation list; and a Needs attention summary]GET / is a dashboard embedded in the binary (no build step, no external assets):
- Overview — requests, tokens served and saved, index and sync; the knowledge graph with the documents agents were served in the last 24 hours stamped on it; the circulation list; and Needs attention, one line per maintenance signal, worst first.
- Graph — every document and link, zoom and pan (mouse or keyboard), scope filters, search;
select a document to see its links, backlinks and how often it was served
(
#graph=<doc path>links straight to it). - Maintenance — proposals awaiting review, knowledge gaps, documents behind the code, the oldest documents, links to fix and code coverage.
- Activity — latency and volume per tool, the index by scope and the request log; counters persist across restarts and can be reset.
- Instance — the running configuration (secrets shown only as set/unset), with Sync now and Rebuild index.
GET /metrics exposes the counters in Prometheus text format; GET /api/stats as JSON.
Knowledge gaps. Every search_context / compile_bundle call is logged with its retrieval
confidence (query_log, 30-day retention). The dashboard lists the questions of the last seven
days that the knowledge base did not answer — nothing matched, or the agent's report_usage said
no section helped — grouped by question and ranked by how often they were asked, plus the answered
questions whose top result barely stood out from the rest. That list is the backlog for whoever
maintains the repository; GET /api/gaps?days=7&limit=20 returns it as JSON.
Document age. Every section in a bundle carries the date its document last changed
(## path — heading (updated 2026-03-04), from git history, or the file mtime for a plain
directory), so an agent can weigh a rule by its age. The dashboard lists the documents that
changed longest ago — the ones to re-read first.
Behind the code. Give a document refs: ["services/payment/**"] in its front matter and
list the code repositories in code.repos; briefd follows their history (bare clones, never the
files) and counts the commits that touched a governed path after the document last changed.
The attribution line then reads (updated 2026-03-01; code changed since: 3 commits, last 2026-06-01), the dashboard lists the documents most behind, and briefd_documents_behind_code
is exported. The agent reading a stale rule is often the right one to fix it with
propose_update. Design in ADR-0007.
The same refs work the other way round: pass paths (the files the task touches) to
compile_bundle and the rules that govern them lead the bundle, and the dashboard's
Coverage panel lists the directories of each code repository that no document claims —
the knowledge base's blind spots (ADR-0008).
briefd does not index code itself; your agent's grep and LSP do that better.
Retrieval quality
Retrieval is measured, not assumed. make eval scores 47 English golden queries (keyword,
paraphrase, typo, mixed-language) over the sample corpus and 30 Turkish queries over a
Turkish corpus; CI fails if hybrid retrieval drops below eval/thresholds.yaml
or eval/thresholds-tr.yaml:
On public BEIR datasets briefd's vector-only mode reproduces the published quality of both
embedding models and hybrid mode beats BM25 and vector-only on each — SciFact nDCG@10 0.714
vs 0.665 for the BEIR BM25 baseline; see eval/beir/ to reproduce.
Every change to chunking, embeddings or fusion ships with before/after numbers (ADR-0004 is an example).
CLI
Status and roadmap
v0.1 is feature-complete; expect rough edges before 1.0. Planned next:
- usage-driven relevance tuning from
report_usage - contradiction detection for proposals
- a light Turkish stemmer for the BM25 side and glossary-alias query expansion
- multiple knowledge repositories per instance
Read docs/ARCHITECTURE.md for a guided tour with diagrams. The full
specification is in SPEC.md; decisions are recorded in docs/adr/.
Contributing
Issues and pull requests are welcome — see CONTRIBUTING.md for the development setup, testing rules and conventions. Security issues: SECURITY.md.
License
來源:README.md,提交 0b289c7
工具
0版本歷史
6- v0.6.1最新Oct 1, 2026
- v0.6.0Sep 23, 2026
- v0.5.0Sep 22, 2026
- v0.4.0Sep 21, 2026
- v0.3.0Sep 21, 2026
- v0.2.1Sep 20, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分