@ssheleg/agent-stack 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,45 @@
|
|
|
1
|
+
## v0.22.0 — the failures named from outside, and the control that is absence
|
|
2
|
+
|
|
3
|
+
**`graph-engineering.md` was argued entirely from what breaks, with no citation behind it.**
|
|
4
|
+
*Why Do Multi-Agent LLM Systems Fail?* (2025) measured the same ground: traces from seven
|
|
5
|
+
mainstream frameworks — MetaGPT, ChatDev, AG2, Magentic-One — with human annotators
|
|
6
|
+
independently analysing ~**150 traces** at **Cohen's kappa = 0.88**, yielding **14 failure
|
|
7
|
+
modes in three groups**.
|
|
8
|
+
|
|
9
|
+
The reason to carry it is that the three groups land on this file's own five-field node
|
|
10
|
+
contract without being bent to fit: *system design flaws* on the interface and the `owner`,
|
|
11
|
+
*inter-agent alignment failures* on the edge payload — §3's **Carries** column — and
|
|
12
|
+
*missing task verification* on `check` and the checker node. An outside measurement arriving
|
|
13
|
+
at the same joints is worth more than another argument from failure.
|
|
14
|
+
|
|
15
|
+
**And its load-bearing result is the negative one.** Better prompts, more explicit roles and
|
|
16
|
+
retries bought ChatDev **15.6%**, and the authors conclude the modes are **architectural
|
|
17
|
+
rather than bugs** — the same claim §1 makes about the two fields nobody draws. The section
|
|
18
|
+
is written as a review checklist, not a taxonomy to admire: per node, is the interface
|
|
19
|
+
stated, is there exactly one owner, and does the check run on something other than the
|
|
20
|
+
node's own claim of success.
|
|
21
|
+
|
|
22
|
+
**`governance.md` put per-tool authorisation at the moment of invocation, and there is a
|
|
23
|
+
strictly stronger control one layer earlier.** *The model cannot reason about capabilities
|
|
24
|
+
it does not know exist.* A tool absent from the schema cannot be invoked, argued for, or
|
|
25
|
+
probed for a bypass; a tool present and refused at call time is a negotiation, and
|
|
26
|
+
negotiations are won sometimes. Sub-agent isolation needs both halves — schema filtering at
|
|
27
|
+
construction **and** `message_history = None` at execution, because a sub-agent handed its
|
|
28
|
+
parent's transcript has been told about every capability you removed from its schema.
|
|
29
|
+
|
|
30
|
+
**Two numbers that point in opposite directions on purpose.** Eagerly loading every MCP tool
|
|
31
|
+
schema at startup consumed **40% of the context budget before the first user message**; a
|
|
32
|
+
metadata index with schemas fetched on selection takes it **under 5%**. Yet the same system
|
|
33
|
+
builds *its own* prompt and tool schemas **eagerly**, in the constructor. The rule is not
|
|
34
|
+
*lazy is better*: it is **eager for what you own and always need, lazy for what is foreign
|
|
35
|
+
and might not be used.**
|
|
36
|
+
|
|
37
|
+
**Approval fatigue is filed as a safety failure, not a UX complaint.** An approval system
|
|
38
|
+
with no persistence makes users re-approve the same operations every session, which produces
|
|
39
|
+
blanket auto-approval and defeats the safety system entirely — through the user rather than
|
|
40
|
+
through a bug, so nothing in the logs looks wrong. **A control that is asked too often is a
|
|
41
|
+
control on its way to being switched off.**
|
|
42
|
+
|
|
1
43
|
## v0.21.0 — the risk one tool cannot show you, and the money an iteration refund does not cover
|
|
2
44
|
|
|
3
45
|
Two findings, both of them about a rule that is right on one axis and silently assumed to
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "agent-stack",
|
|
4
4
|
"displayName": "Agent Stack",
|
|
5
5
|
"description": "Four skills: agent-orchestrator — tool-calling loops, pipelines with checkpoints, provider routing with fallback, memory architecture, plus the wallet side of reselling LLM access; agent-evals — run/trace/thread evals, LLM judges, and fixtures grown from production; agent-interop — MCP servers and clients, A2A agent cards, the MCP Registry, and gateways; agent-harness — system prompts, tool shaping, workflow-vs-agent, and auditing an agent system.",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.22.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "ssheleg",
|
|
9
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -36,6 +36,45 @@ guardrails" so often means only the first.
|
|
|
36
36
|
The last one is the one most designs miss: a sub-agent that inherits its caller's
|
|
37
37
|
authority silently widens every permission the caller had.
|
|
38
38
|
|
|
39
|
+
## The cheapest control is absence
|
|
40
|
+
|
|
41
|
+
The **Tool call** row above puts per-tool authorisation at the moment of invocation. There
|
|
42
|
+
is a control one layer earlier and it is strictly stronger:
|
|
43
|
+
|
|
44
|
+
> **The model cannot reason about capabilities it does not know exist.**
|
|
45
|
+
|
|
46
|
+
A tool absent from the schema cannot be invoked, cannot be argued for, and cannot be probed
|
|
47
|
+
for a bypass — there is nothing to jailbreak toward. A tool present in the schema and
|
|
48
|
+
refused at call time is a negotiation, and negotiations are won sometimes.
|
|
49
|
+
|
|
50
|
+
So **filter the schema at build time**, and treat runtime authorisation as the second line
|
|
51
|
+
rather than the first. Sub-agent isolation comes from exactly two mechanisms used together:
|
|
52
|
+
schema filtering when the agent is constructed, and no inherited conversation
|
|
53
|
+
(`message_history = None`) when it runs. The second matters as much as the first — a
|
|
54
|
+
sub-agent handed its parent's transcript has been told about every capability you carefully
|
|
55
|
+
removed from its schema.
|
|
56
|
+
|
|
57
|
+
**Two numbers, and they point in opposite directions on purpose.** Eagerly loading every
|
|
58
|
+
MCP tool schema at startup consumed **40% of the context budget before the first user
|
|
59
|
+
message**; a metadata index at startup with the full schema fetched on selection takes it
|
|
60
|
+
**under 5%**. But the same system builds *its own* prompt and tool schemas **eagerly**, in
|
|
61
|
+
the constructor. The rule underneath is not *lazy is better*: it is **eager for what you
|
|
62
|
+
own and always need, lazy for what is foreign and might not be used** — the first removes
|
|
63
|
+
latency and race conditions from the hot path, the second removes a cost you cannot predict.
|
|
64
|
+
|
|
65
|
+
### Approval fatigue is a safety failure, not a UX complaint
|
|
66
|
+
|
|
67
|
+
> Without persistence, users must re-approve the same operations every session, causing
|
|
68
|
+
> approval fatigue that leads to **blanket auto-approval, defeating the safety system
|
|
69
|
+
> entirely**.
|
|
70
|
+
|
|
71
|
+
An approval system with no memory converts itself into no approval system, and it does so
|
|
72
|
+
through the user rather than through a bug — so nothing in the logs looks wrong. The
|
|
73
|
+
remedy is on the same axis as the section above: **decide once what does not need asking,
|
|
74
|
+
remove it from the question, and spend the prompts on what genuinely changes.** A control
|
|
75
|
+
that is asked too often is a control on its way to being switched off.
|
|
76
|
+
|
|
77
|
+
|
|
39
78
|
## Guardrails, and their honest limit
|
|
40
79
|
|
|
41
80
|
The content-layer checks worth having, roughly in order of reliability:
|
|
@@ -28,6 +28,7 @@ well-measured answer to the wrong question.
|
|
|
28
28
|
- [9. What Claude Code actually executes](#9-what-claude-code-actually-executes)
|
|
29
29
|
- [10. Barrier or no barrier](#10-barrier-or-no-barrier)
|
|
30
30
|
- [11. Project defaults, written once](#11-project-defaults-written-once)
|
|
31
|
+
- [11a. MAST — the failures, named from outside](#11a-mast--the-failures-named-from-outside)
|
|
31
32
|
- [12. The source's four diagrams, and what each one is for](#12-the-sources-four-diagrams-and-what-each-one-is-for)
|
|
32
33
|
- [Where this file disagrees with its source](#where-this-file-disagrees-with-its-source)
|
|
33
34
|
|
|
@@ -375,6 +376,32 @@ The last line is `context-engineering.md`'s *filesystem as context* stated as a
|
|
|
375
376
|
rule: an edge that carries a path costs a few tokens, and an edge that carries a
|
|
376
377
|
transcript costs the window.
|
|
377
378
|
|
|
379
|
+
## 11a. MAST — the failures, named from outside
|
|
380
|
+
|
|
381
|
+
Everything above is argued from what breaks. *Why Do Multi-Agent LLM Systems Fail?* (2025)
|
|
382
|
+
measured it: execution traces from seven mainstream frameworks — MetaGPT, ChatDev, AG2 and
|
|
383
|
+
Magentic-One among them — with human annotators independently analysing roughly **150
|
|
384
|
+
traces** at **Cohen's kappa = 0.88**, producing **14 failure modes in three groups**.
|
|
385
|
+
|
|
386
|
+
The three groups land on this file's own node contract, which is the reason to carry them:
|
|
387
|
+
|
|
388
|
+
| MAST group | Modes include | The field it lands on |
|
|
389
|
+
|---|---|---|
|
|
390
|
+
| **System design flaws** | unclear interfaces between agents, overlapping roles, wrong tool configuration | `input` / `output` (the interface), and `owner` (overlapping roles) |
|
|
391
|
+
| **Inter-agent alignment failures** | inconsistent understanding of the objective, downstream misinterpretation, logically contradictory operations | the **edge payload** — what actually crosses, §3's *Carries* column |
|
|
392
|
+
| **Missing task verification** | an agent reports *completed* and the result does not meet the requirement | `check`, and §6's checker node |
|
|
393
|
+
|
|
394
|
+
**The load-bearing result is the negative one.** Straightforward fixes — better prompts,
|
|
395
|
+
more explicit role descriptions, retries — bought ChatDev only **15.6%**. The authors
|
|
396
|
+
conclude the modes are **architectural rather than bugs**, which is the same claim §1 makes
|
|
397
|
+
about the two fields nobody draws: an owner and a completion test are not documentation of
|
|
398
|
+
a graph, they are the parts that make it a graph.
|
|
399
|
+
|
|
400
|
+
Read the mapping as a review checklist rather than a taxonomy to admire: for each node, is
|
|
401
|
+
the interface stated, is there exactly one owner, and does the *check* run on something
|
|
402
|
+
other than the node's own claim of success.
|
|
403
|
+
|
|
404
|
+
|
|
378
405
|
## 12. The source's four diagrams, and what each one is for
|
|
379
406
|
|
|
380
407
|
The article carries four hand-drawn figures. They are not decoration — each one is doing
|