
Concord Engine
io.github.harsh-chandak由 GitHub 帳號 harsh-chandak 發布v0.3.2更新於 Oct 24, 2026
Scale parallelism. Preserve alignment. A fleet of coding agents builds one task in parallel against
發布方自己的服務:Concord
概覽
一個本機 MCP 伺服器,讓助理記錄、攔阻並稽核架構決策,使平行工作的編碼代理保持一致。
- 可以做什麼
- 撰寫並驗證任務契約,在寫程式前把其中的決策綁定進共用日誌(write_contract、bind_contract)。為每個工作單元產生簡報,並輸出依相依性分波的平行計畫(brief_unit、fleet_plan)。記錄決策,與已生效決策衝突時會被拒絕,並列出生效決策與未解衝突(record_decision、binding_decisions、open_conflicts)。記錄嘗試並查看執行狀態(record_attempt、status)。執行驗收指令、依日誌產生設計文件,並統計分送的位元組數(run_acceptance、generate_docs、cost_report)。
- 適用情境
- 當多個編碼代理平行處理同一任務、且不能對同一問題給出不同答案時使用;也適合需要把決策、決策者與理由連同程式碼一起記錄並可稽核的情境。
- 執行需求
- 以 stdio 在本機執行,通常透過 npx concord-engine 或 Claude Code 外掛安裝。決策日誌預設位於工作目錄下的 .concord-engine,可用 CONCORD_ENGINE_DIR 或 --dir 改到別處。驗收會執行契約中指定的指令,因此專案需具備相應的測試工具。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Concord Engine,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Concord Engine
Scale parallelism. Preserve alignment.
Describe a task. A fleet of agents builds it. They come back with work that is finished, tested and documented — and that agrees with itself, because none of them was allowed to contradict a decision another had already made.
Parallel agents don't scale past the human in the middle. You run five to go faster, four of them are right, the product is broken, and the only thing that catches it is you — reading everything, holding the whole picture, re-explaining choices that were already settled.
That isn't a prompting problem. Your agents have memory and they have verification, and neither answers the question that actually breaks a parallel run:
Did these two agents just settle the same question differently?
Concord Engine answers it by comparison, never by a model, and refuses the second answer at the moment it is written.
Recorded, not drawn. brag/record.mjs runs the real CLI and captures its
output verbatim; brag/video.html only renders what was captured. The loop
shows the refusal arc — the full run also writes the contract, binds it and
briefs four workers first.
What a decision is
This is the part that gets undersold. A "decision" is not a variable name. It is any question two agents could answer differently and both be reasonable — and the cost is never the question itself, it's that nothing goes red.
Four agents implementing four reasonable answers to "what does an error body look like" produce four green test suites and one broken product. That is the whole category, and it is much wider than route paths.
The failure it stops
A refunds feature, split across a backend worker and a client worker. The backend settles the error shape. The client, working in parallel and with no visibility into the backend's files, reaches a different answer:
Verbatim from the recording above.
The agent is stopped at the moment it tries to disagree, and told what is in force, who decided it, why, and the two legitimate ways out. Not at integration. Not by you.
Three ways to run it
As a skill, which is how most people will use it. Describe the task; the agent runs the whole loop — authors the contract, binds it, briefs each worker, fans out, gates every decision, runs the acceptance checks, writes the design doc.
Nothing about the task has to be small, and nothing has to be a route.
As an MCP server, so an agent already mid-task can reach the gate without
being handed a workflow. Twelve tools: write_contract, bind_contract,
brief_unit, fleet_plan, run_acceptance, generate_docs, cost_report,
plus record_decision, binding_decisions, open_conflicts,
record_attempt, status.
As a CLI, for humans and for CI. concord-engine check exits non-zero
when anything contradicts, which is a one-line pipeline step.
Why this isn't another memory tool
And the obvious way to answer it — store decisions as prose, ask a model whether two of them conflict — is slow, costs a call per check, and is wrong often enough that people stop trusting it. A coordination layer nobody trusts is worse than none, because it adds latency and false alarms to a workflow that had neither.
Concord Engine decides agreement by comparison, never by a model. Decisions are typed and narrow, so a contradiction is a comparison: same subject, different value. No API call exists anywhere in the decision path — there's a test that fails if any file in that path can reach outside the process, and a second one that fails if any file in the package, anywhere, calls a model.
The loop
The gate above is one organ. v0.2 is the body around it: you describe a task, and the fleet that builds it is bound to one set of decisions from before the first line of code.
Every loop command takes --contract. The MCP server exposes the same set as
write_contract, bind_contract, brief_unit, fleet_plan, run_acceptance,
generate_docs and cost_report.
The contract
One JSON document. The agent writes it; the package decides whether it holds.
openSubjects is the part people skip and shouldn't. Naming a thing before
anyone decides it is what stops two workers inventing two different names for
it — see Honest limits for the run where that went wrong.
Validation is not a formality. A contract is rejected when two of its own decisions contradict each other, when a unit depends on one that doesn't exist, when the dependency graph has a cycle, when a unit has no acceptance criterion, or when a criterion has no command. All of it in one pass, because fixing one error per round trip is the expensive way to find four:
bind then puts the contract's decisions into the log at PM layer. If one of
them contradicts a decision already live, binding refuses — a new contract
quietly overriding decisions in force is the exact failure this tool exists to
prevent.
What one worker gets
A brief, and not the conversation. This is the actual brief the unit that wrote this file was given. Verbatim, abridged only where marked:
fleet prints all of them at once, grouped into waves by dependsOn, so the
host knows what it can run in parallel.
What the package decides, and what it doesn't
The package never calls a model. The agent authors; the host spawns; the package decides everything that can be decided by comparison.
Every row on the right is a comparison, a schema check or a subprocess exit
code. Two tests enforce the split: nothing in the decision path may leave the
process by any means, and no file anywhere — including accept, which exists
to spawn subprocesses — may reach a model.
This is the differentiator, not a gap. Fan-out is a loop and a prompt; every orchestrator has one. What nobody does is make the fleet's decisions binding on each other, and that only stays trustworthy while no model is in the path.
Install
The harsh-chandak marketplace is hosted in the shadowjoin repo and carries
both tools — that first line is not a typo.
Then describe the work and let it run the loop:
Or without Claude Code:
Use
Leads and the PM decide. Workers write code and decide nothing.
Outside a contract, decide still refuses a decision that contradicts one in
force — it just cannot check what a unit was allowed to settle, because
without --unit there is nothing that says.
verify means route verification, as it did in v0.1. Acceptance criteria are
run by accept.
Five kinds, each with its own comparison rule:
Where the log lives
.concord-engine/decisions.jsonl, in the working directory — append-only JSON
Lines, one decision per line, no parser needed to read it. Contracts sit beside
it in .concord-engine/contracts/.
Commit it. The log is the contract between your agents, so it has to travel
with the code the way a migration does. Set CONCORD_ENGINE_DIR or pass
--dir to put it elsewhere; the CLI and the MCP server resolve the location
the same way, so check always audits the file the server writes.
Who resolves what
Adjudication is read off the hierarchy, not judged. A PM decision overrides a lead's — that's an override, not a conflict. Two leads who disagree go to the PM. Two PMs who disagree reach you, because nothing outranks them.
Two attempts at a layer, then it escalates. What reaches you is a packet — both positions, who holds each, why, and what has already been tried:
Not "something went wrong, go read the logs."
The design doc nobody writes
docs renders the run from the decision log: the goal, what was in and out of
scope, every decision in force with its author, timestamp and rationale, and a
table of the commands that proved the work. It is generated, so it can't drift
from what was actually decided — and it's the first design doc that costs
nothing to keep current, because nobody writes it.
The number that matters
Every other orchestrator reports agents launched, tokens spent, tasks completed. None of them reports whether the system handled itself — which is the only number that says whether running ten agents actually cost you less than running one.
What the fan-out cost
The saving is structural, not a trick: a worker receives its brief, not the conversation. A brief is one unit's slice plus the decisions that bind it — small, fixed, and identical across the run. A transcript is none of those things.
The package measures bytes, because bytes are what it can count. Run on this repo's own contract — five units, five binding decisions. Reproduce it by cloning and running the same command:
Every token figure it prints is labelled an estimate and states the chars-per-token assumption behind it. The baseline is the whole contract per worker, not your real session — your actual saving is larger, and this tool will not guess by how much.
A worked example
examples/linkfold.contract.json is the contract from the run this README
keeps citing: a URL shortener built by four workers who never saw each other's
code, which came out working — 55 tests and a real HTTP round trip between
three units that agreed on a wire format they never discussed.
It carries the openSubjects the original run was missing, which is why that
run settled the error format twice under two names. CI revalidates it on every
push.
Honest limits
-
Only what's recorded is checked. A lead who decides something in prose and never records it is invisible to this.
-
Subjects are matched by wording, not by meaning. Case, punctuation and accents are normalised, so "User Identifier" and "user identifier" collide. Two agents who describe the same thing in genuinely different words do not. This is the tool's sharpest edge, and it is not theoretical: on the first run of this loop against another project, two workers settled the error format under "error response body shape" and "api error response body", chose incompatible payloads, and
checkreported no contradiction because it never compared them.The mitigation is
openSubjects: name the thing in the contract before anyone decides it, anddecide --contract <id> --unit <id>refuses a subject the contract never declared, offering the declared spelling instead. That makes subject identity a lookup rather than a guess. Matching subjects by similarity would close the gap too, and would put a judgement back in the decision path — which is the one thing this package will not do.The residual risk is real: a decision recorded without
--contract, or with--new-subject, is matched by wording again. -
verifyonly recognises Express-shaped registrations. It looks forapp/router/server/apifollowed by a method call, plus FastAPI and Flask decorators. A plainnode:httpserver that switches onreq.urlserves routes it cannot see. Broadening the pattern to any identifier would makecache.get("key")look like a route, so it stays narrow and under-reports. -
verifyreads literal paths only. A router mounted under a prefix, or a path built at runtime, is invisible to static extraction. It under-reports rather than accusing falsely, and prints how many files it read so the number isn't mistaken for completeness. -
It doesn't spawn workers.
fleetemits briefs; your host spawns. A package that shells out to another agent CLI inherits that tool's auth, rate limits and failure modes, and stops being a library. -
It doesn't write the contract. Authoring is a model call, and model calls happen outside the package.
-
It doesn't count tokens. No tokenizer ships. Bytes are measured; tokens are divided and labelled.
-
It doesn't verify the work was done.
acceptruns the commands the contract named. If the contract named weak commands, it will pass. -
It doesn't judge which decision is better. It reports that two can't both hold, and who gets to rule.
-
A worker can still bypass the gate.
decidewithout--unitskips the check on what that unit may decide, and--forcerecords a contradiction deliberately. Both are visible in the log, andreportcounts them. The gate is a guardrail, not a sandbox. -
Five kinds, deliberately.
dependencyis deferred until semver range intersection is implemented properly; a comparator that calls^1.0.0and^1.2.0incompatible would be worse than not having it.
License
MIT © Harsh N. Chandak
來源:README.md,提交 4801ffa
工具
0版本歷史
2- v0.3.2最新Oct 23, 2026
- v0.3.1Oct 17, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Concord 整合
Concord
tech.concord官方發布者
使用您的 Concord 隱私與信任資料:同意、隱私請求、資料地圖、風險、供應商。AI 翻譯

Concord
由 GitHub 帳號 standards-concord 發布
Concord 的遠端 MCP 端點,這是 ODI 標準中心原型平台,讓助理讀取、查詢 OWL/LinkML 本體、驗證資料並回報缺口。

Concord
由 GitHub 帳號 jeswr 發布
遠端 MCP 伺服器,讓助理讀取、查詢 ODI 標準中心本體(OWL、LinkML),並依本體檢查資料、回報落差。

Concord Mcp
由 GitHub 帳號 zkwasm 發布
Concord 讓 AI 程式開發代理加入端對端加密的多代理協作房間,與其他代理和人類收發訊息、共享檔案並協調工作。

Concord MCP
由 GitHub 帳號 Get-Concord-AI 發布
本機 MCP 伺服器,為不同用戶端中的編碼代理提供共用工作區,用來認領任務、互相傳訊並附證據交接工作。