Prove
Ship it everywhere, and know that it landed.
Connect a document to the repositories and people who should have it, and the file is written on every machine bound to them. Seven states say whether it actually landed, and only one of them is allowed to be green.
Drawing a connection
Distribution is a canvas. On one side are the things you can ship: documents you wrote or uploaded, and skills. On the other are the destinations: your Spaces, the repositories bound to them, and the people in them. You drag from one to the other.
There is no publish button, and there is no confirm step. The arrow you draw is the record, so a connection is live the moment you make it and gone the moment you delete it. That is worth knowing before your first drag: this is a canvas that saves as you move, not a diagram you commit at the end.
Seeing the page at all needs knowledge.distribute, which owners, admins and curators hold at the workspace level. A Space admin does not get it, because every control here writes across the whole workspace. See who sees what, and who decides.
What lands, and where
Harbor writes whole files at its own paths. It never writes a region inside a file you authored, and it never edits your CLAUDE.md or AGENTS.md. It used to, through a channel that wrote a managed block inside a customer’s file, and that channel was deleted; the cleanup that strips those old markers is still running.
| What you connected | Where it lands | Notes |
|---|---|---|
| A document, in a repository | .claude/docs/<name>.md | One directory down if it is in a folder: .claude/docs/<folder>/<name>.md |
| A document, to a person | ~/.claude/docs/<name>.md | Always flat. A home directory receives documents from every Space that person is in, so a folder segment there would belong to no one team |
| A skill, anywhere | .claude/skills/<name>/SKILL.md | One directory per skill, and filing it in a folder never moves it |
Beside them sits a .milestone-managed manifest listing the files Harbor put there, with a checksum for each. Only files on that list are ever removed. A markdown file you drop into .claude/docs/ yourself is left alone forever, and the directory survives as long as anything of yours is in it.
A folder is living, not a snapshot
You can group documents and skills into a folder and connect the folder instead. This is the widest gesture in the product: file a document into Billing and it appears in every repository Billing reaches, with nothing further to do. That is the point of it. Ten handbook pages into twelve repositories was a hundred and twenty drags, and a page written next week reached none of them.
There is no pull request, and that is deliberate
A file does not arrive as a pull request for you to approve. The daemon on each machine writes it into the working tree, which means it shows up in git status alongside whatever else you are doing, and it becomes part of the repository when somebody commits it. Nothing Harbor runs commits or pushes on your behalf.
Harbor did open pull requests, and that design was dropped once the arithmetic was clear: one document into twenty repositories is twenty review requests, and every edit to that document is another twenty. Nobody approves that, so the file would simply stop being updated, which is the exact failure the feature exists to prevent.
Whether it actually landed
Drawing an arrow is a statement of intent. Whether the file is on somebody’s machine is a separate question, and the honest answer to it is often we cannot tell yet. Harbor answers with one of seven states rather than a checkmark.
| State | Reading | What it means |
|---|---|---|
| delivered | It landed | A machine reported holding these exact bytes, inside the reporting window. |
| drifted | Somebody edited it | The file is there and somebody edited it. Their bytes are left alone, which also means the file stops updating in that repository. |
| missing | It should be there and is not | A machine's own manifest claims this file and it is gone from disk. |
| pending | Sent, not yet confirmed | No machine has reported holding it yet. |
| cannot reach | There is no route | Nobody on this destination has ever reported a machine, so the file has nowhere to travel. |
| stale | The witness went quiet | The machine that would prove this stopped reporting, and its last word is too old to draw. |
| unverifiable | Written before we kept digests | We cannot tell whether it was edited, and we will not guess. |
Only delivered is green, and it cannot be earned by a row existing. It requires a machine to have reported holding those exact bytes, recently enough that the report still counts. A connection you drew thirty seconds ago is pending, not delivered, and a machine that stopped reporting takes its files to stale rather than leaving them green. Four of the seven states are grey on purpose: they are not findings about your files, they are statements about the limits of what Harbor watched.
This is the same discipline as served versus cited. A tool that renders every unproven thing as a tick is a tool you cannot use to answer a question that matters.
What this does not do
Two things it would be reasonable to expect, which are not what ships:
- It does not curate the document’s contents for you. Nothing in the distribution path reads cite rates, adds rules that proved useful, or removes rules agents ignored. What ships is the document as you last left it. The evidence-driven part is real, but it is on Knowledge, as two lists of candidates for removal that a person acts on.
- It does not reach a machine nobody has set up. Delivery rides on the CLI. A teammate who has never run
harbor inithas no route, and the canvas says so once for the workspace rather than greying out every card.
None of this reaches anybody until a machine is syncing, which is the other half of this feature and lives in the CLI: harbor sync, and CI.