@ssheleg/agent-stack 0.16.1 → 0.17.1
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 +84 -0
- package/README.md +3 -2
- package/package.json +1 -1
- package/plugins/agent-stack/.claude-plugin/plugin.json +2 -1
- package/plugins/agent-stack/skills/agent-evals/SKILL.md +7 -0
- package/plugins/agent-stack/skills/agent-harness/SKILL.md +26 -6
- package/plugins/agent-stack/skills/agent-interop/SKILL.md +10 -6
- package/plugins/agent-stack/skills/agent-orchestrator/SKILL.md +10 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,89 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.17.1 — the evals run for the first time, and the tails go to zero
|
|
4
|
+
|
|
5
|
+
Wave-3 of the 2026-08-29 family audit (rows AST-05, AST-07, AST-08, AST-09, AST-10),
|
|
6
|
+
plus the two board rows wave 2 filed (AST-A1, AST-B). All fixes and docs — no
|
|
7
|
+
description or trigger changes, hence a patch.
|
|
8
|
+
|
|
9
|
+
- **AST-05: the eval suite is executed for the first time.** `test/evals/RESULTS.md`
|
|
10
|
+
gains two dated rows — haiku and sonnet, 2026-08-31 — each a fresh blind subagent
|
|
11
|
+
per trigger query against the family's 28 skill descriptions, plus all three
|
|
12
|
+
scenarios scored line by line. Both models: 11/12 triggers. Scenario lines: 10/12
|
|
13
|
+
(haiku), 9/12 (sonnet). Each miss is named — haiku false-triggered `agent-harness`
|
|
14
|
+
on "rewrite this one system prompt so it sounds friendlier" (q09), sonnet answered
|
|
15
|
+
`none` on the Russian harness-audit query (q04) — and the Method section states the
|
|
16
|
+
protocol and its three limits rather than presenting the rates as clean-room.
|
|
17
|
+
- **AST-B: the generator-evaluator citation lands where the doctrine lives.**
|
|
18
|
+
`agent-evals` §5a now cites Anthropic's *tuning a standalone evaluator to be
|
|
19
|
+
skeptical is more tractable than making a generator self-critical* (read
|
|
20
|
+
2026-08-30) beside the sentence making the same claim, marked as convergence
|
|
21
|
+
rather than invention — beside the first executed eval run, as the board row asked.
|
|
22
|
+
- **AST-A1: the nine-subsystem coverage check is done and the row closes.** The ninth
|
|
23
|
+
subsystem the filing row could not name is **Automation**; all nine map to existing
|
|
24
|
+
doctrine with a `file:line` each, and the suspected identity/approval-policy gap
|
|
25
|
+
resolves as a split verdict — approval policy covered (`governance.md`),
|
|
26
|
+
authentication mechanics a named delegation (`layers.md:78-80`), not a hole. The
|
|
27
|
+
map lives in the board row (`docs/evidence/backlog.md`), not in a new reference.
|
|
28
|
+
- **AST-07: the README stops counting its references.** "Twenty references" had
|
|
29
|
+
drifted to 24 actual files within a week of being written; the aggregate count is
|
|
30
|
+
dropped in favour of the per-skill counts that are still true, with the reason
|
|
31
|
+
stated in place.
|
|
32
|
+
- **AST-10: the orchestrator's reference index lists all 11 references.** The three
|
|
33
|
+
memory rows — `memory-architecture.md`, `memory-lifecycle.md`,
|
|
34
|
+
`memory-landscape.md` — join the index table, each paraphrasing its own
|
|
35
|
+
"Load this when" line.
|
|
36
|
+
- **AST-08: `license: MIT` in all four skill front matters** (was 1 of 4 —
|
|
37
|
+
`agent-evals` alone carried it). Every front matter re-checked with
|
|
38
|
+
`yaml.safe_load` after the edit.
|
|
39
|
+
- **AST-09: `$schema` in both manifests** — `claude-code-plugin-manifest.json` for
|
|
40
|
+
`plugin.json`, `claude-code-marketplace.json` for `marketplace.json`, the two
|
|
41
|
+
schemastore addresses that resolve (the third candidate, `claude-code-plugin.json`,
|
|
42
|
+
is a 404 and two siblings currently point at it; referred, not copied).
|
|
43
|
+
|
|
44
|
+
## v0.17.0 — the descriptions stop colliding, and the claims get their dates
|
|
45
|
+
|
|
46
|
+
Wave-2 of the 2026-08-29 family audit (rows AST-02, AST-03, AST-04, AST-06, AST-11), plus
|
|
47
|
+
the harness-engineering externals read 2026-08-30.
|
|
48
|
+
|
|
49
|
+
- **AST-02: `agent-orchestrator` gives "checker node" back to `agent-evals`.** The quoted
|
|
50
|
+
trigger appeared verbatim in both descriptions, so the router had two skills advertising
|
|
51
|
+
one phrase. `agent-evals` owns it; the orchestrator's description already carries "a
|
|
52
|
+
checker before convergence" in prose, which is the claim it actually makes.
|
|
53
|
+
- **AST-11: the single-word triggers "agent" / "агент" narrow to "agent system" /
|
|
54
|
+
"агентная система".** A one-word trigger matching every sentence with the word *agent*
|
|
55
|
+
in it is how a skill teaches the router to route around the boundary its own description
|
|
56
|
+
draws ("Not for a single LLM call in a script"). The multiword triggers carry the load.
|
|
57
|
+
- **`agent-harness` advertises "ReAct loop" and "react pattern" instead of bare "ReAct"** —
|
|
58
|
+
a phrase the umbrella's deferred hook trigger can carry without firing on every mention
|
|
59
|
+
of the React framework. The body prose still explains ReAct by its own name.
|
|
60
|
+
- **AST-06: the harness↔orchestrator boundary names its four seams instead of claiming
|
|
61
|
+
one.** `agent-harness` §Boundaries said the two skills "meet in one place" while the
|
|
62
|
+
pack actually crosses at four: orchestrator §3 → harness `tools.md` (describing a tool
|
|
63
|
+
vs assembling the list), orchestrator §10 → harness `system-prompt.md` (what the prompt
|
|
64
|
+
says vs rebuilding it per request), harness static-or-dynamic → orchestrator
|
|
65
|
+
`graph-engineering.md`, and `context-engineering.md` (compaction) vs `system-prompt.md`
|
|
66
|
+
(filling). The rewrite states explicitly that shape-of-the-work doctrine has ONE home —
|
|
67
|
+
`agent-orchestrator/references/graph-engineering.md` — and the harness intro stops
|
|
68
|
+
claiming "the shape of the work" as its own ground, which was the sentence that made
|
|
69
|
+
both skills owners of one table.
|
|
70
|
+
- **AST-03/AST-04: `agent-interop`'s undated external claims get their dates.** "Moved in
|
|
71
|
+
the last twelve months", "SDKs and blog posts still document v0.3" and "its own overview
|
|
72
|
+
page still introduces `binds`" sat undated inside the very section whose rule is *a
|
|
73
|
+
protocol claim without a date is a guess* — all three now anchor to **2026-08-13**, the
|
|
74
|
+
stamp every reference in the skill already carries. The neighbourhood table gains a
|
|
75
|
+
"Verdicts as of 2026-08-13" line, since `test/validate.py` gates stamps only under
|
|
76
|
+
`references/` and the table lives in SKILL.md.
|
|
77
|
+
- **`agent-harness` cites the outside term for its ground: harness engineering.** OpenAI's
|
|
78
|
+
harness-engineering article and Anthropic's harness-design article (both read
|
|
79
|
+
2026-08-30) name the layer this skill covers, with the measured leverage — ARC-AGI-3
|
|
80
|
+
harness-level changes moved a fixed model 13.3%→38.3% at a sixth of the tokens (as
|
|
81
|
+
reported 2026-08-30). "harness engineering" joins the description triggers: users will
|
|
82
|
+
say it. The deeper work is filed, not done: board rows **AST-A1** (coverage check
|
|
83
|
+
against OpenAI's nine-subsystem taxonomy, identity/approval policy the suspected gap)
|
|
84
|
+
and **AST-B** (the dated generator-evaluator citation in `agent-evals`, deferred to
|
|
85
|
+
evals day).
|
|
86
|
+
|
|
3
87
|
## v0.16.1 — the installers refuse the shadow, and the pack stops mis-selling itself
|
|
4
88
|
|
|
5
89
|
- **Both installers refuse to write plain copies over an installed plugin.** The family
|
package/README.md
CHANGED
|
@@ -33,8 +33,9 @@ Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills).
|
|
|
33
33
|
|
|
34
34
|
Four skills — `agent-orchestrator` for wiring the loop, `agent-evals` for proving it
|
|
35
35
|
behaves, `agent-interop` for everything it talks to outside its own process,
|
|
36
|
-
`agent-harness` for what it is **told** — and
|
|
37
|
-
plus one scanner.
|
|
36
|
+
`agent-harness` for what it is **told** — and the references they load on demand,
|
|
37
|
+
plus one scanner. The per-skill sections below carry their own counts; no total is
|
|
38
|
+
stated here, because the last one drifted stale within a week of being written.
|
|
38
39
|
|
|
39
40
|
**The orchestrator** (`SKILL.md`) — what the agent reads first:
|
|
40
41
|
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
2
3
|
"name": "agent-stack",
|
|
3
4
|
"displayName": "Agent Stack",
|
|
4
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.",
|
|
5
|
-
"version": "0.
|
|
6
|
+
"version": "0.17.1",
|
|
6
7
|
"author": {
|
|
7
8
|
"name": "ssheleg",
|
|
8
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -168,6 +168,13 @@ the one most systems are missing: a **checker node** sitting between a parallel
|
|
|
168
168
|
the node that consumes it. Its only job is *usable / not usable*, and the convergence
|
|
169
169
|
depends on **it** rather than on the branches — otherwise the gate has a bypass.
|
|
170
170
|
|
|
171
|
+
**That split is measured practice, not only this pack's position.** Anthropic's
|
|
172
|
+
harness-design guidance (`anthropic.com/engineering/harness-design-long-running-apps`,
|
|
173
|
+
read 2026-08-30) reports that *tuning a standalone evaluator to be skeptical is more
|
|
174
|
+
tractable than making a generator self-critical* — the same reason the verdict belongs to
|
|
175
|
+
a separate node rather than to the branches grading themselves. Dated and cited so a
|
|
176
|
+
reader can tell doctrine that converged with the field from doctrine invented here.
|
|
177
|
+
|
|
171
178
|
It matters here because it is the same machinery as §5, positioned differently:
|
|
172
179
|
|
|
173
180
|
<!-- checker-contract: missing, empty, unevidenced, malformed, contradictory, off-topic | optional: under-confident -->
|
|
@@ -8,17 +8,25 @@ description: >-
|
|
|
8
8
|
instead of a score, plus a scanner. Carries Pi as a worked kernel implementation — SDK, RPC
|
|
9
9
|
and extension seams — for embedding or extending a harness. Triggers - "system prompt",
|
|
10
10
|
"tool description", "agent picks the wrong tool", "agent loops forever", "prompt
|
|
11
|
-
engineering", "
|
|
11
|
+
engineering", "harness engineering", "ReAct loop", "react pattern", "workflow or agent",
|
|
12
|
+
"static or dynamic", "audit this agent",
|
|
12
13
|
"embed an agent", "agent SDK", "Pi harness", "системный промпт", "агент не вызывает тул",
|
|
13
14
|
"аудит агента", "встроить агента". Not for the loop's plumbing, its evals, or its
|
|
14
15
|
protocols — those are siblings.
|
|
16
|
+
license: MIT
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
# Agent harness — what the agent is told, and how to audit what someone else told theirs
|
|
18
20
|
|
|
19
21
|
`agent-orchestrator` wires the loop. `agent-evals` proves it behaves. `agent-interop` gets
|
|
20
22
|
it talking to other processes. **This skill is the layer between them and the model: the
|
|
21
|
-
prompt, the tools, and the
|
|
23
|
+
prompt, the tools, and the choice of technique.** The outside term for this ground is
|
|
24
|
+
**harness engineering** — OpenAI's article of that name (`openai.com/index/harness-engineering`,
|
|
25
|
+
read 2026-08-30) and Anthropic's harness-design guidance
|
|
26
|
+
(`anthropic.com/engineering/harness-design-long-running-apps`, read 2026-08-30) both name
|
|
27
|
+
this same layer, and its leverage is measured: on ARC-AGI-3, harness-level changes alone
|
|
28
|
+
moved a fixed model from 13.3% to 38.3% while spending a sixth of the tokens (as reported
|
|
29
|
+
2026-08-30).
|
|
22
30
|
|
|
23
31
|
It runs in both directions. Building one and auditing one are the same checklist read
|
|
24
32
|
forwards and backwards, which is why they live together here.
|
|
@@ -146,10 +154,22 @@ is then unfalsifiable — including this audit. Say so first, and make it the fi
|
|
|
146
154
|
|
|
147
155
|
**Against `agent-orchestrator`.** That skill owns the loop's *plumbing*: iteration guards,
|
|
148
156
|
trimming, sub-agent dispatch, provider routing, memory layers, checkpoints. This one owns
|
|
149
|
-
what the model is *told*. They meet in one place:
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
the
|
|
157
|
+
what the model is *told*. They meet at four seams, each crossing in exactly one place:
|
|
158
|
+
|
|
159
|
+
1. **Describing a tool** so the model picks the right one is this skill's
|
|
160
|
+
`references/tools.md`; assembling the tool *list* per request from capability flags is
|
|
161
|
+
the orchestrator's §3, which points here for the wording.
|
|
162
|
+
2. **What the prompt says** — altitude, vocabulary, enumerated statuses — is this skill's
|
|
163
|
+
`references/system-prompt.md`; *rebuilding* that prompt per request, in the same pass
|
|
164
|
+
as the tools, is the orchestrator's §10.
|
|
165
|
+
3. **The shape of the work** — the static/dynamic table, the fake-edge test, the checker
|
|
166
|
+
before a convergence — has ONE home, and it is not here:
|
|
167
|
+
`agent-orchestrator/references/graph-engineering.md`. This skill's static-or-dynamic
|
|
168
|
+
section stops at the decision and links there for the model.
|
|
169
|
+
4. **The context window:** `agent-orchestrator/references/context-engineering.md` covers
|
|
170
|
+
**compaction** — what to drop when the window fills — while this skill's
|
|
171
|
+
`system-prompt.md` covers what to put there in the first place. Filling and emptying,
|
|
172
|
+
two files.
|
|
153
173
|
|
|
154
174
|
**Against `agent-evals`.** That skill measures whether an agent behaves, from execution
|
|
155
175
|
records. This one reviews how it was *built*, from its source and prompts. An audit that
|
|
@@ -12,6 +12,7 @@ description: >-
|
|
|
12
12
|
"agentgateway", "tool federation", "MCP-сервер", "карточка агента", "интероперабельность
|
|
13
13
|
агентов", "реестр MCP", "шлюз для агентов". Not for designing one server's tool set, nor for
|
|
14
14
|
a skill's own construction — that is make-skill.
|
|
15
|
+
license: MIT
|
|
15
16
|
---
|
|
16
17
|
|
|
17
18
|
# Agent interop — the protocols an agent speaks outside its own process
|
|
@@ -24,19 +25,20 @@ registry, and the gateway between them.
|
|
|
24
25
|
|
|
25
26
|
## Rule zero — a protocol claim without a date is a guess
|
|
26
27
|
|
|
27
|
-
Every one of these specifications moved in the
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
Every one of these specifications moved in the twelve months before **2026-08-13** — the
|
|
29
|
+
date every reference below was read — and each moved in a way that silently breaks code
|
|
30
|
+
written against the previous revision. Concretely, and each one measured on that date
|
|
31
|
+
against the live specification rather than recalled:
|
|
30
32
|
|
|
31
33
|
- MCP replaced the `initialize` handshake with `server/discover` and made the protocol
|
|
32
34
|
**stateless**; a client that opens with `initialize` is speaking a revision that is on its
|
|
33
35
|
way out.
|
|
34
36
|
- MCP **deprecated `sampling`, `roots` and `logging`** — three things an older model will
|
|
35
37
|
reach for first, because for a year they were the interesting part of the client side.
|
|
36
|
-
- A2A renamed its wire surface between v0.x and v1.0, and SDKs and blog posts still
|
|
37
|
-
v0.3.
|
|
38
|
+
- A2A renamed its wire surface between v0.x and v1.0, and SDKs and blog posts still
|
|
39
|
+
documented v0.3 as of 2026-08-13.
|
|
38
40
|
- agentgateway **deprecated `binds`** in favour of `gateways` — while its own overview page
|
|
39
|
-
still
|
|
41
|
+
still introduced `binds` as a core concept as of 2026-08-13.
|
|
40
42
|
|
|
41
43
|
So: **every reference in this skill opens with a `**Spec pinned:**` line**, and
|
|
42
44
|
`test/validate.py` fails the build without one. That is a mechanical check, not an
|
|
@@ -119,6 +121,8 @@ it); prompt wording; a single LLM call in a script.
|
|
|
119
121
|
## The neighbourhood — one verdict each
|
|
120
122
|
|
|
121
123
|
Named so an agent stops guessing, with the verdict stated rather than implied.
|
|
124
|
+
**Verdicts as of 2026-08-13**, the day this skill's references were pinned — this ground
|
|
125
|
+
moves, so re-verify anything marked *watch* before building on it.
|
|
122
126
|
|
|
123
127
|
| Thing | What it actually is | Verdict |
|
|
124
128
|
|---|---|---|
|
|
@@ -7,11 +7,12 @@ description: >-
|
|
|
7
7
|
architecture, retrieval and decay, context budgets, sub-agent coordination, error hierarchies; the
|
|
8
8
|
work as a graph — parallel layers, fake edges, a checker before convergence; for resale:
|
|
9
9
|
tiered wallets, one markup boundary, two-phase commit across database and provider API,
|
|
10
|
-
spend-delta polling, budget and loop guards, per-tenant keys. Triggers - "agent",
|
|
10
|
+
spend-delta polling, budget and loop guards, per-tenant keys. Triggers - "agent system",
|
|
11
11
|
"orchestrator", "tool calling", "sub-agent", "LLM router", "fallback chain", "human in the
|
|
12
|
-
loop", "memory layer", "LLM billing", "token wallet", "
|
|
12
|
+
loop", "memory layer", "LLM billing", "token wallet", "агентная система", "оркестратор",
|
|
13
13
|
"суб-агент", "роутер моделей", "человек в цикле", "слой памяти", "биллинг LLM", "граф задач".
|
|
14
14
|
Not for a single LLM call in a script, or prompt wording.
|
|
15
|
+
license: MIT
|
|
15
16
|
---
|
|
16
17
|
|
|
17
18
|
# Agent Orchestrator — Production Best Practices
|
|
@@ -245,9 +246,7 @@ answer built from nothing, in no error log.
|
|
|
245
246
|
**Design a memory layer from
|
|
246
247
|
[`references/memory-architecture.md`](references/memory-architecture.md)**, not from this
|
|
247
248
|
table — it also carries the context-budget trap, layer 0 carryover and workspace scale.
|
|
248
|
-
The write path
|
|
249
|
-
what to build on and measure with is
|
|
250
|
-
[`references/memory-landscape.md`](references/memory-landscape.md).
|
|
249
|
+
The write path and the build-or-adopt question have their own rows in the index below.
|
|
251
250
|
## 8. Self-Learning Feedback Loops
|
|
252
251
|
|
|
253
252
|
Three cycles feed the memory layers, and they differ by what supplies the signal: a failed
|
|
@@ -373,15 +372,18 @@ heading — the ones that were learned by getting them wrong:
|
|
|
373
372
|
## References
|
|
374
373
|
|
|
375
374
|
Each file opens with its own **Load this when** line — the authoritative trigger lives
|
|
376
|
-
there
|
|
375
|
+
there; this table is only an index.
|
|
377
376
|
|
|
378
377
|
| File | Read it when |
|
|
379
378
|
|---|---|
|
|
380
|
-
| [`references/graph-engineering.md`](references/graph-engineering.md) | you are deciding the **shape of the work** —
|
|
379
|
+
| [`references/graph-engineering.md`](references/graph-engineering.md) | you are deciding the **shape of the work** — fake edges, the diamond, the checker node, static versus dynamic |
|
|
381
380
|
| [`references/pipeline.md`](references/pipeline.md) | one loop is **not the shape** — the planned path, its checkpoints, resume, and the interrupt that asks a person |
|
|
382
381
|
| [`references/patterns.md`](references/patterns.md) | you need the **data models and algorithms** under the body |
|
|
382
|
+
| [`references/memory-architecture.md`](references/memory-architecture.md) | an agent is **being given memory**, or memory is misbehaving |
|
|
383
|
+
| [`references/memory-lifecycle.md`](references/memory-lifecycle.md) | the memory **write path** — what enters, and what leaves |
|
|
384
|
+
| [`references/memory-landscape.md`](references/memory-landscape.md) | **build or adopt** a memory layer, and what is settled practice |
|
|
383
385
|
| [`references/context-engineering.md`](references/context-engineering.md) | the loop is **running out of window** |
|
|
384
386
|
| [`references/runtime.md`](references/runtime.md) | the agent must **survive a crash, a pause, a second message or a schedule** |
|
|
385
387
|
| [`references/governance.md`](references/governance.md) | the question is **permission, not cost** — what it may do, and how you prove it |
|
|
386
388
|
| [`references/llm-proxy-billing.md`](references/llm-proxy-billing.md) | the product **resells LLM access** |
|
|
387
|
-
| [`references/provider-lifecycle.md`](references/provider-lifecycle.md) | the question is the **workforce, not the loop** —
|
|
389
|
+
| [`references/provider-lifecycle.md`](references/provider-lifecycle.md) | the question is the **workforce, not the loop** — provider lifecycle, canary trust, fleet budgets |
|