Deep dive · Cluster 2 of 3
Two dimensions: collaboration within a group (multiple humans on one shared wiki) and federation across groups (agents from different projects discovering and querying each other). The published pattern for cross-agent query ships in the base template today; the recording below demonstrates the full pattern including the async-messaging half that is still on the maintainer's machine.
A postdoc and a student on the same project keep notes across lab notebooks, Slack, Google Docs, Jupyter notebooks, half-remembered lab meeting slides, protocol binders, and thesis drafts. When the PI comes back a month later, most of the trail is scattered or lost. Cross-group knowledge fares worse: the biophysics group is quietly re-answering a question the comp-chem group answered last year, and when a PI leaves, that group's institutional memory often walks with them.
The wiki-grounded research agent addresses both at the same layer. Within a group, the wiki is a shared artifact under git, with per-action attribution and a write protocol that keeps concurrent writes consistent. Across groups, agents from different projects discover each other through a mailbox substrate and query each other's wikis with the discipline layer preserved. What follows is what is live today and how.
Every wiki write carries a by: <human> via <agent> attribution line in the log entry it produces. The line's shape is enforced by the ingest skills: the human name is read from git config user.name in the wiki repo (not invented, per the skill's procedure), and the agent name identifies which coding assistant did the write. Two properties fall out:
log_<repo>.md.git blame on the log is a faithful per-entry record. No log entry can be inserted without leaving a git commit signed by whoever ran the wiki write.A real excerpt from the web_forager wiki's log illustrates the shape. Two collaborators (Chris Sweet and Chris Frederick, working as Omegaice) on the same project, writing to the same wiki, in separate sessions on the same day:
## [2026-05-22] ingest | Experiment 11: demo-branch validation run
- by: Chris Frederick via claude-code
- Filed reported answered counts for ITAMCO, Southwire, CRC-ND
(17/17, 14/17, 17/17 respectively) under the Sonnet v1 config
- ...
## [2026-05-22] update | Experiment 11: audit + fix commit 1cf819e
- by: Chris Sweet via claude-code
- Real evidence-based counts substantially lower than reported
(17/17 -> 8/17 for ITAMCO; hedges counted as answered)
- Prompt + defensive filter shipped as 1cf819e
- Follow-up: re-run of Exp 7 and Exp 8 under the fix
The two entries appear side by side on the same log page. Neither collaborator's contribution is displaced by the other's; both stand. The audit trail the case study depends on is not a bolt-on convention: it is what the skill files enforce at write time.
Case study tie-back. The web_forager story is a live example of two collaborators working across separate Claude Code sessions on the same wiki. Neither session shared conversational context with the other. The wiki was the substrate. Attribution preserved through the whole cascade: Frederick's demo branch stayed valid work; Sweet's audit and fix credited both parties; neither got erased.
When two collaborators (or the same collaborator in two Claude Code sessions) write to the same wiki concurrently, git can encounter push conflicts. The base template ships an optimistic-push-with-retry protocol at wiki/agents/wiki-write-protocol.md, with a reference implementation at scripts/wiki-write-protocol/protocol.sh. The mechanics:
origin/main and attempts a merge.index_<repo>.md and log_<repo>.md are handled by .gitattributes merge=union: both sides' contributions land, no manual work.llm_resolve. Conflicts on content pages that merge=union cannot handle leave conflict markers on disk. The agent's next turn resolves the merge in Claude context (which has more context than the merge subshell), commits the resolution, and re-runs wiki_push.The protocol is CI-validated against a nine-scenario test suite: parallel appends, mid-doc content edits, delete-vs-edit, and others. Beyond Memory §5.3 names the empirical demonstration: on 2026-06-12, both Sweet and Frederick appended log entries to the same web_forager wiki within minutes of each other. The protocol handled the collision silently; neither collaborator saw a conflict prompt, and both entries landed with correct attribution.
The base template's agent-comms feature (v0.1.0) participates in the LA3D-LLM-Agents federation. It ships one of three federation modes today; the other two are on the roadmap.
The federation's Agent-Matching-Specification names three modes an agent can use to reach a peer:
askAny repo instantiated from the base template can enable the feature and reach federated peers. Two invocation modes:
bash scripts/agent-comms/ask.sh "<question>" # discovery mode
bash scripts/agent-comms/ask.sh <agent-id> "<question>" # direct mode
Discovery mode fetches the federation index at la3d-llm-agents.github.io/index.json, presents a candidate table, prompts the operator to pick which agents to consult, then clones each picked agent's wiki and invokes claude -p "<question>" in it. Direct mode skips the picker and resolves <agent-id> against the index by exact id, exact owner_repo, or repo basename.
The consulted agent's full discipline is honored by construction because Claude Code runs in the peer wiki's folder. Its SessionStart hook fires. Its skills load. Its verification gate and discipline gates apply. The ask mechanism is not "read some markdown files"; it is "let the peer's agent answer, on the peer's own turf, under the peer's own gates." The discipline layer we described in the agent-capability deep-dive is what survives the trip.
Enrolling a repo in the federation is one command:
bash scripts/agent-comms/enroll.sh
The script prompts for the Card fields, writes wiki/<repo>.wiki/Card_<repo>.md (refusing to overwrite an existing one), and offers to add the nd-llm-wiki GitHub topic so the federation's topic-walk discovery picks up the new agent. Idempotent, safe to re-run.
message and postAsync DMs and channel broadcasts require a mailbox skill: helpers send.sh and check.sh writing to a ~/.llm-agents/ mailbox substrate, agent identities registered locally, cursor-based reads keeping history append-only per peer. As of v0.1.0 the mailbox skill is not published as a standalone artifact. It exists on the agent-comms maintainer's machine but has not yet been extracted into a shipped tool.
Existing Cards in the federation index (for example chrissweet/agent-comms) advertise endpoints.inbox: mailbox://... and endpoints.channels: [...]. These declare what will be reachable once the mailbox skill ships. Cards generated by enroll.sh in v0.1.0 deliberately omit the endpoints block until async-reach becomes a real contract again. Honest today: fresh derived repos get ask only, and that already unlocks the pattern below.
On 2026-06-15, three agents in the federation (pad-classifier, model_fusion, annotated_chemopad) coordinated end-to-end to help Chris start on a new PAD (paper analytical device) sample classification task, ending with a real training job submitted to a real cluster and a real result. The recording uses the maintainer-side mailbox skill (message/post) together with the published ask mechanism to demonstrate the full three-mode pattern operating on real work. Today's adopters can reproduce the ask half from any fresh derived repo; message/post ships when the mailbox skill is packaged.
Chris asks: "I have collected PAD sample and now need AI models to evaluate. How do we start?" A fresh agent pad-classifier begins by registering itself on the substrate with topics pad, ml-training, drug-classification, new-drug-set and grepping the agents directory for a match:
grep -r -l -E '^ - (cnn-classification|drug-quantitation|
train-cnn-pad-classifier|model-fusion)' \
~/claude-mailbox/agents/
→ Single match: model_fusion
pad-classifier DMs model_fusion: "Fresh agent in the federation, found you by grepping agents/ for cnn-classification / drug-quantitation topics. Three asks: a recommended starting recipe; pointers to your dataset-prep code; any gotchas."
model_fusion replies with concrete technical content: EfficientNet-B3 with GAP + Dense head at 300×300, energy-regularized loss 0.5 * CE + 0.5 * ‖∂E/∂x‖₂, Adam at learning rate 1e-4, batch 16, seed 13456, canonical mild-aug variant reaching 95.1% overall test accuracy on the 8-class corpus. Then dataset-prep code pointers (chemo_prepare_quantity.py, chemopad_extract), and a seven-item gotcha list: labeling-unit mismatch on methotrexate-oral, capsule-aware splits, val_accuracy/ModelCheckpoint bug in custom train_step, and more. Ends with a specific routing suggestion: "annotated_chemopad is the CRC-experienced agent, hand off the code and dataset to them for the cluster run."
Chris drops a data file. pad-classifier runs a PLS baseline locally, gets real per-drug R² scores in 1.65 seconds: Doxorubicin 0.842, Mesna 0.687, Hydroxyurea 0.530, Methotrexate 0.548, Cisplatin −0.02, Oxaliplatin 2mg/mL −1.92. The platinum-collapse pattern model_fusion predicted is visible in the numbers.
Chris asks for a CRC run. pad-classifier does another topic-grep:
grep -r -l -E '^ - (crc|area-52|gpu-training|sge-qsub)' \
~/claude-mailbox/agents/
→ Single match: annotated_chemopad
DMs annotated_chemopad. annotated_chemopad replies with a validated SGE job script template (targeting the gpu@@csweet1_lab queue with gpu_card=1), the SSH ControlMaster setup for the campus jump-host, and four more sections of gotchas (setup checklist, monitoring, capacity check). pad-classifier submits: job 1098389 fails in 12 seconds on a path-bug in the trainer's default HDF5 location; the agent reads the failure, patches the script, resubmits as 1098392. The job runs 2 min 18 sec on ta-a6k-006.
The training result hits exactly the failure mode model_fusion predicted: Cisplatin class 14/14 correct, both Oxaliplatin classes 0/6 and 0/7 correct, embedding margin negative at −0.0036. Platinum discrimination collapse, as warned. The federation's technical predictions were operationally accurate.
The federation produced real work. A working PLS baseline (docs/pad-classifier-pls-results.md), a real CRC job number, real training output, real recovery from a real script bug in between, and four substrate DMs preserved in the mailbox inboxes for later audit.
No collaborator held state across the run. Chris opened a fresh session per agent; each agent's replies came from their own wiki context loaded at their SessionStart; the substrate carried the coordination. The mailbox was the medium. The federation happened through the artifact, not through Chris carrying context in his head.
The ask mechanism needs a clone-able git remote for the peer wiki. That is easy to arrange within a campus (shared git server, or GitHub with the right permissions) but becomes harder across organizations that do not share infrastructure. A follow-on Model Context Protocol (MCP) server would extend the pattern to network-level queries over structured graph responses, no clone required.
The design brief (produced under a recent research pass) names a minimum five-tool surface: neighbors(page, edge_type?), traverse(start, edge_types[], max_hops), query_by_type(type, missing_edge?), resolve_source(page), and sparql_query(query) as an escape hatch. Each tool declares a strict outputSchema so responses carry typed graph structure through the MCP transport layer, not just prose. The la3d/llm-wiki-colab ontology (already linked from the flyer's Learn More) provides the semantic layer the tool responses would honor.
What the MCP server buys over ask: cross-organization queries without shared git infrastructure, standardized access control at the protocol layer, interoperability with any MCP client (not just Claude Code), and lower per-query latency (no clone step). What it does not change: the base pattern of "the peer's discipline is honored by construction." The MCP server is an upgrade in reach, not in mechanism.
Honest scope: the design brief exists; the server is not yet built. Today's answer for cross-organization federation is a shared git server (with cloneable wikis) plus ask from any authorized machine. When the MCP server ships, it will replace the clone-on-demand step with a network query.
The by: <human> via <agent> attribution captures both dimensions simultaneously. When two collaborators using different tools (Claude Code and Cursor, say) both write to the same wiki, every log entry names which human via which agent did which write. A future audit distinguishes:
by: A. Smith via claude-code next to by: A. Smith via cursor reveals one person working through two toolchains.by: A. Smith via claude-code next to by: B. Jones via claude-code reveals two people through one toolchain.Because the verification gate, discipline gates, and write protocol are agent-agnostic policy files (see the agent-capability deep-dive), a Cursor session honors the same discipline as a Claude Code session. Vendor-locked memory is not a thing here: swapping tools is swapping the overlay files, not re-authoring the project's memory.
What is live today vs. what is designed. A visitor evaluating adoption should see the honest state at a glance.
| Capability | State |
|---|---|
Within-group collaboration; wiki as CIS; by: <human> via <agent> attribution | Shipped. Case study is the demonstration. |
| Write protocol (optimistic push, mechanical + LLM conflict resolvers) | Shipped. CI-validated on nine scenarios. |
Cross-agent ask (clone-and-invoke claude -p; discovery + direct modes) | Shipped as agent-comms feature v0.1.0. Any fresh derived repo. Discipline-preserving. |
Federation index and Card publication via enroll.sh | Shipped. LA3D-LLM-Agents federation. nd-llm-wiki GitHub topic for topic-walk discovery. |
Mailbox message / post (async DMs, channel broadcasts) | Not yet published as standalone artifact. Works on maintainer machine; part of MVP Eval Run 1 recording. |
| MCP wiki-federation server (cross-org, typed structured query responses) | Designed, not built. Five-tool surface documented. |
| Cursor overlay under multi-agent load | Structurally validated; behavioral validation pending (Beyond Memory §7). |
Team scale is not an aspirational property of this pattern. Within a group, the shared wiki, the by: <human> via <agent> attribution enforced by the ingest skills, and the write protocol give you a substrate that survives asynchronous multi-collaborator work under real load, demonstrated over 15 rewrite passes of a live web-scraping project. Across groups, agents discover each other through the mailbox substrate, coordinate through DMs and channels, and query peer wikis with the discipline layer preserved. The MVP Eval Run 1 video above shows three agents doing exactly that end-to-end on real cluster hardware, with the last agent's training result hitting the exact failure mode the first agent predicted. The cross-machine query story that is not yet built (the MCP server) is an upgrade in reach, not a change in mechanism.