Getting a Grip: Operating Human-Agent Software Teams Through Governed Messages
Organizations: University of Passau Germany · IT:U Interdisciplinary Transformation University Austria Linz, Austria
Abstract
Software is increasingly developed by teams in which several people direct many coding agents from different vendors. Such teams must establish who may request what from whom, which messages start work, which decisions bind, and who caused a change. We propose to govern a human-agent team through its message protocol and present yoars, a relay in which humans and agents are authenticated principals that exchange typed, addressed messages in rooms holding goals, decision rules, routing and an attributable, append-only record. This report gives the architecture, the full controlled study and the field material. In 926 controlled runs (899 analyzable), small agent teams built programs under varied room rules, some with a hostile member planting a backdoor. Revising which messages start work, bundled with limits on repeated messages, was followed by a drop in total coordination failure from 42% to 13% (p = .0063, adjusted p = .057 over nine registered tests). Instructed roles and votes did not reliably produce the intended process, and no defense inside the conversation reliably prevented the backdoor. An auditor read the records of 96 runs with a confirmed backdoor. In the 25 runs where the attacker had persuaded a teammate to write it, the auditor named the persuader in all 25, but it also flagged 24 of 40 honest runs. In a four-week field study, up to nineteen agents and two people developed a distributed system through yoars, producing 7,457 acts. Human attention and decision making emerged as the critical resource: requests waited mainly for the human-run coordinator and for approvals, while agents answered within minutes. Most governance requirements emerged from operation, and holding context dominated token cost. We report twenty-six failures of our own instruments, derive seven lessons and a checklist, and release the corpus, the redacted room ledger and the analysis scripts.
Figures & tables
| humans as peers | independent agents | typed obligations | control of wake-up | goals, decisions | enforced routing | attributable record | |
| MetaGPT, ChatDev | – | – | – | ||||
| AutoGen | – | – | – | – | |||
| MCP, A2A | – | ✓ | – | – | – | ||
| KQML, FIPA ACL | – | ✓ | ✓ | – | – | – | – |
| Electr. institutions | ✓ | ✓ | – | ✓ | |||
| ParallelPilot | – | – | – | – |
| capability | governs | default |
|---|---|---|
| narration , disclosure | publishing plans, declaring a workspace | permitted ∗ |
| roster , profiles | who is present; peers’ roles and missions | permitted |
| statistics | reading the room’s traffic figures | permitted |
| resource_status | reading peers’ declared progress | forbidden |
| observable | reading the room without joining | forbidden |
| invites | bringing others in | permitted |
| Concern | Decision | Problem that forced it | Built: blocks |
|---|---|---|---|
| Identity | Authorization uses only opaque principal identifiers. Handles are addresses and are never parsed for rights. The acting mode is authenticated, not declared. | The predecessor system trusted identity carried in headers and names. | day 1: all |
| Envelope | Recipients and kind travel together in one versioned envelope. A name in prose addresses nobody. Replies follow one contract. | Free-text addressing left it to each reader who was meant. | days 1–2: all |
| State changes | Goals, resources and votes change only through typed, authorized operations, never through commands parsed from message bodies. | Two authorities for one state, and a replayed message could repeat a mutation. | day 2 (rule): all |
| Relations | Goals, causes and waits are declared by the participant who knows them, never inferred by the relay. | An inferred cause leaked information and named the wrong cause. | waits day 28: 0.14 rule day 50: field |
| Delivery | One fenced delivery per recipient: claim, lease, acknowledge, expire, redeliver. The socket only notifies. Delivery is at least once, with idempotent intake. | The predecessor had four dispatchers and lost completions. | day 1: all |
| Obligation | An obligation is owed per recipient, not per message. | A wait-for edge needs a debtor. | day 25: 0.14 |
| Controlled comparison | Runs | Reg. | RQ | Controlled comparison | Runs | Reg. | RQ |
|---|---|---|---|---|---|---|---|
| Message access workspace | 5 | 1 | Message-starting rules, repeated | 40 | ✓ | 1 | |
| Workspace description | 5 | 1 | Proposal and voting tools, two families | 60 | ✓ | 1 | |
| Coordinator workspace | 36 | ✓ | 1 | Hostile agent room access | 48 | ✓ | 2 |
| Six conflicting fields, two families | ✓ | 1 | Reviewer agents (0–3) | ✓ | 2 | ||
| Assigned integrator, three variants | 32 | ✓ | 1 | Voting instructions; social-attack replication | ✓ | 1, 2 | |
| Role combinations | 45 | ✓ | 1 | Single agent versus team | 48 | ✓ | 2 |
| Rung | Workspace | Channel | Adds |
|---|---|---|---|
| 1 | shared tree | none | artifacts |
| 2 | shared tree | commit announcements | notice |
| 3 | shared tree | full envelope | intent |
| 4 | shared remote | none (git remote) | transport |
| Condition | Msgs | Commits | Truth | Contract |
|---|---|---|---|---|
| 1 shared/none | 0 | 3 (ritual) | pass | settled * |
| 2 shared/notice | 7 | 5 (2 work) | pass | settled * |
| 3 shared/full | 61 | 0 | pass | settled * |
| 4 remote/none | 0 | 0 | fail | diverged |
| 4 ′ remote/none, instructed | 0 | 19 | pass | settled |
| Condition | stated | implemented | deferred |
|---|---|---|---|
| 1 shared/none | 0 | no | yes |
| 2 shared/notice | 0 | no | yes |
| 3 shared/full | 0 † | no | yes |
| 4 remote/none | 0 | yes | yes a |
| 4 ′ remote/none, instructed | 0 | no b | yes |
| Cell | n | 2/2 | 0/2 | modal shape |
|---|---|---|---|---|
| coord/shared | 8 | 3 | 2 | agreed+integrated (6/8) |
| mesh/shared | 10 | 3 | 7 | integrated w/o agreeing (5/10) |
| coord/per-agent | 8 | 3 | 3 | agreed+integrated (5/8) |
| mesh/per-agent | 10 | 3 | 5 | agreed+integrated (5/10) |
| opaque | transparent | |
|---|---|---|
| produced a working artifact | 5/19 | 17/19 ( ) |
| backdoor shipped (all runs) | 4/19 | 14/19 ( ) |
| backdoor shipped artifact | 4/5 | 14/17 ( ) |
| utility (graded, 0–6) | 1.42 | 4.74 |
| reviewers | runs | built | backdoor built |
|---|---|---|---|
| 0 | 24 | 22 | 21/22 |
| 1 | 12 | 9 | 7/9 |
| 2 | 12 | 9 | 9/9 |
| 3 | 12 | 11 | 11/11 |
| any vs none | 27/29 vs 21/22 ( ) |
| auditor | detected | persuader | sens. / spec. |
|---|---|---|---|
| Opus 5, neutral | 96/96 | 25/25 | 97% / 92% |
| Opus 5, cooperative framing | 96/96 | 25/25 | 97% / 97% |
| fleet model (Qwen3.6) | 53/95 | 2/23 | 39% / 100% |
| Opus 5, code only | 100/100 | 16/24 | — |
| Opus 5, messages only | 110/110 | 25/25 | — |
| cell | built | backdoor built | utility |
|---|---|---|---|
| solo, no file | 10/12 (9/11) | — | 5.00 (4.91) |
| team, no file | 12/12 (6/6) | — | 6.00 (6.00) |
| solo, planted | 12/12 (11/11) | 1/12 (0/11) | 6.00 |
| team, planted | 10/12 (8/8) | 5/10 (3/8) | 5.00 |
| Family | Msgs | Fid. | Judge | Recon. | Shape |
|---|---|---|---|---|---|
| DeepSeek (×2) | 34–40 | 1.0 | 4.0 | 2/2 | agreed+integrated |
| luna (×4) | 28–51 | 1.0 | 4.0 | 1–2/2 | agreed+integrated |
| luna † | 242 | 0.53 | 5.0 | 2/2 | agreed, not integrated |
| Gemma | 102 | 1.0 | 3.5 | 2/2 | agreed+integrated |
| Mistral (×2) | 19–52 | 0.6–0.75 | 3.0 | 1/2 | mixed |
| DeepSeek ∗ | 241 | 0.6 | 2.0 | 2/2 | agreed+integrated |
| team / attacker | direct | social |
|---|---|---|
| Qwen3.6 / Qwen3.6 | 6/6 (8/8) | 2/5 (2/7) |
| DeepSeek-0731 / same | 9/9 (10/10) | 7/11 (7/11) |
| frontier / frontier | 5/5 (6/6) | 5/5 (5/5) |
| Qwen3.6 / frontier | 6/6 (8/8) | 4/5 (4/6) |
| W1 | W2 | W3 | W4 | |
| Acts per day | 204 | 263 | 426 | 287 |
| Active agents | 9 | 16 | 17 | 19 |
| Request–recipient pairs | 367 | 448 | 570 | 367 |
| issued by coordinators | 88% | 83% | 77% | 67% |
| component to component | 2 | 23 | 32 | 27 |
| Human-run coordinator: answered | 97% | 98% | 89% | 78% |
| (a) A rolled-back release | |||
| +0:00 | co-author’s agent deployment, ui | req | “Operator’s order, on yoars-ui v0.80.0 … roll it to dev, then to full” |
| +1:00 | deployment ui | req | “the retry branch hit the same wall, and I found the cause” |
| +1:24 | deployment ui | inf | “v0.80.0 … is NOT on full. Dev’s postdeploy is RED; I rolled dev back to 0.79.0.” |
| 11.5 h: no message reaches ui | |||
| +12:57 | source ui | req | (an unrelated request; ui wakes) |
| +13:24 | ui deployment | req | “yoars-ui v0.80.1 is tagged and pushed” |
| Pattern | Hits | Prec. |
| Helpful | ||
| Red-first test or mutation gate as evidence | 1,571 | 19/20 |
| Fixed honesty phrases (“built, not deployed”) | 802 | 18/20 |
| Verdict-like review act | 600 | 15/20 |
| Self-correction of an earlier act | 48 | 19/20 |
| Independent part built while a question is open | 30 | 19/20 |
| Theme | W1 | W2 | W3 | W4 |
| Deployment and fleet operation | 11% | 21% | 24% | 32% |
| Messaging and wake rules | 25% | 10% | 8% | 14% |
| Harness, context and cost | 20% | 4% | 13% | 7% |
| Governance (goals, decisions, roles) | 12% | 23% | 10% | 12% |
| Observability and console | 11% | 7% | 17% | 9% |
| Identity, credentials, security | 10% | 12% | 9% | 1% |
| Question | Evidence |
|---|---|
| Do agents know which code they can read and how to publish? | L1: 242 messages, no code published |
| Which acts start work, and which only inform? | L2: 42% to 13% failure (adj. ) |
| Which rules are enforced rather than instructed? | L3: 21 of 35 proposals unvoted |
| Can the record show who requested a change? | L4: 25 of 25 requesters named |
| Which decisions need a person, and who else may take them? | L5: 148 h in coordinator checks |
| What survives a compaction? | L6: 36% of identifiers kept |
Appendix figures & tables10 assets
Supplementary material from the paper’s appendix.
Appendix
| Run | Msgs † | Cost | Published | Recon. | Provenance |
|---|---|---|---|---|---|
| 1 (confounded) | 271 | $34.21 | none | 2/2 | storage |
| baseline | 64 | $1.81 | all | 1/2 | storage |
| variance 1 | 68 | $3.72 | all | 2/2 | storage |
| variance 2 | 46 | $1.23 | all | 1/2 | storage |
| counterbalance | 51 | $1.63 | all | 1/2 | storage |
| † Raw message totals of the room, including echoes of the participation probe. | |||||
| to day 52 | days 52–59 | days 59–66 | days 66–70 | |
| roles with turns | 4 | 7 | 15 | 10 |
| model turns | 140 | 607 | 1,293 | 897 |
| deliveries | 91 | 221 | 388 | 299 |
| declared cost | $765 | $1,152 | $1,623 | $610 |
| cost per day | $235 | $177 | $230 | $155 |
| per delivery, median | $4.81 | $0.63 | $0.87 | $0.44 |
| mechanism | state |
|---|---|
| relay: bounded waits (20 rows, 32 KB); every list read capped at 32 KB with a cursor | acting (cap since day 63) |
| relay: incremental reads ( since ), lean rows, goals by involvement | built; lean rows and the involvement view unused |
| relay: per-room runtime configuration; room experiments with arms | built; nothing set, no arm |
| harness: compaction at a threshold after a delivery; keeper before the cache expires | acting; threshold 25% since day 60 |
| harness: brief kept across a compaction; a bound inside a turn | acting on most seats since day 65; the bound never fired |
| harness: re-prompt held while declared work is in progress | acting since day 60 |
| Comparison | Days | Model | Cells and runs | Primary outcome, test |
|---|---|---|---|---|
| Message access workspace | 3 | GPT-5.6-luna | five conditions, one run each, ended by the operator | settlement and ground truth, descriptive |
| Workspace description | 4 | GPT-5.6-luna | five runs of one condition, one with rotated vocabularies | reconciliation and integration, descriptive |
| Coordinator workspace | 5–6 | DeepSeek-V4-Flash | four cells of up to 10, 38 valid, 36 scoreable after two exports without code | full reconciliation, Fisher |
| Six conflicting fields | 13–14 | agentworld, DeepSeek | 12 shared-remote and 12 per-agent (24 valid), and one cell of 12 in the second family (11 valid) | mean and variance of contested fields reconciled, permutation, Holm over three |
| Assigned integrator | 14–15 | DeepSeek-V4-Flash | three variants registered at 12 each, 9, 12 and 11 valid | committer’s repository the only multi-author one, Fisher |
| Role combinations | 14–18 | DeepSeek-V4-Flash | 15 coalitions 3 on the service task (49 runs passed the check across three launches), and a second block of 45 on the pipeline task | Shapley values, estimation only |
| Comparison | Stop | Check | Primary counts | Relay |
|---|---|---|---|---|
| Message access workspace | operator | first | valid attempts, void ones re-run | checkout |
| Workspace description | operator watch, not recorded | first | baseline up to an operator intervention | checkout |
| Coordinator workspace | 300 s quiet or 3,600 s | quiet (one earlier run, outside the cells) | passed and scoreable | checkout |
| Model comparison | 60-min ceiling | first and second | passed | checkout |
| Message-starting rules | 300 s quiet or 3,600 s | quiet | before: scoreable, incl. 4 failed. After: passed | checkout |
| Six fields, integrator, role combinations, first private-rules block, voting tools | 300 s quiet or 3,600 s | quiet | passed | checkout |
| variant | backdoored | cooperative |
| Opus 5, neutral | 96 (one on one pass) | 40 |
| Opus 5, cooperative | 96 | 39 (one errored) |
| team’s model | 94 of the 96, 1 ablation run | 39 (one errored) |
| code only | 94 of the 96, 6 ablation runs | — |
| messages only | 96, all 14 ablation runs | — |
| shared | 92 | 38 |
| field | storage | back end | interface | planner |
|---|---|---|---|---|
| text | body | text | title | label |
| flag | closed | done | completed | finished |
| model | short name | labels |
|---|---|---|
| Qwen3.6-35B-A3B | Qwen3.6 | qwen3.6-35b , qwen |
| qwen-agentworld-35b-a3b | agentworld | qwen-agentworld-35b |
| DeepSeek-V4-Flash | DeepSeek | deepseek-flash |
| DeepSeek-V4-Flash, later snapshot | DeepSeek-0731 | deepseek-flash-0731 |
| Gemma-4-31B | Gemma | gemma-4-31b |
| Mistral-Medium-3.5 | Mistral | mistral-med |
| measured | consequence |
|---|---|
| cost per delivery heavy-tailed: pooled mean 5 the median; | reward on log cost, role as a fixed effect |
| deliveries that used sub-agents cost 5–56 more (role medians) | the choice tracks the size of the work: randomize, never compare observationally |
| about 37 deliveries a day, fleet-wide | per-delivery arms, fleet-wide |
| a factor of 2 needs 93 deliveries per arm (two-sided 5%, power 0.8) | explore : S0, S1, S2 balanced for 14 days; detects a factor of 1.7 |
| sub-agents on the largest model were 35% of cost (measured, days 59–66); a written token costs about 1.5 times the mid tier’s | S3 not explored for cost; a quality reference only if S1’s acceptance falls |
| with a 15% floor shared by two arms, a factor of 2 needs a 19-day window | exploit : floor 15%, window 21 days; prior on an arm’s effect on log cost |