@haaaiawd/loom 2.0.0 → 2.1.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 +27 -0
- package/CONTRIBUTING.md +37 -37
- package/EVIL_EVAL.md +115 -102
- package/README.md +235 -209
- package/README.zh-CN.md +191 -174
- package/SECURITY.md +11 -11
- package/cli/bin/loom.js +78 -4
- package/cli/src/protocol.js +697 -367
- package/cli/src/store.js +983 -626
- package/design.md +210 -188
- package/docs/PROMPT_CATALOG.md +101 -84
- package/docs/RELEASE_CHECKLIST.md +53 -53
- package/docs/UX_FLOW.md +178 -165
- package/docs/brand/loom-mark.svg +18 -18
- package/docs/brand/loom-readme-header.svg +34 -34
- package/docs/brand/loom-readme-header.zh-CN.svg +29 -29
- package/docs/loom-eval-loop.drawio +21 -21
- package/docs/loom-eval-loop.svg +56 -56
- package/docs/loom-production-loop.drawio +41 -41
- package/docs/loom-production-loop.svg +92 -92
- package/package.json +52 -52
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- Added environment-aware clarification through `loom context --human-channel available|unavailable`. Unattended Agents inspect first, research only permitted objective facts, and then use bounded assumptions or blocks rather than fabricating users or substituting web search for intent.
|
|
6
|
+
- Added `--state-dir <outside-workspace-dir>` sidecars for isolated benchmark and sandbox runs. Sidecars preserve virtual `.loom/` Task references without mutating the scored workspace or its `AGENTS.md`.
|
|
7
|
+
- Added equal human-channel controls and unattended condition prompts to Evil Eval scaffolding.
|
|
8
|
+
|
|
9
|
+
## 2.1.0
|
|
10
|
+
|
|
11
|
+
- Added a current-state and recommended-action header to `loom context` output. Agents entering a project or resuming after compression now see project status, active task, work-map counts, and a recommended next action before the full protocol. The recommendation is advisory, not a script.
|
|
12
|
+
- Rewrote `AGENTS.md` with explicit LOOM trigger conditions (project entry, context reset, before substantial work, between Tasks) and a standard work rhythm that keeps Agent judgment while making the next step obvious.
|
|
13
|
+
- Integrated Crux integrity-chain review into the Keeper handoff. The Keeper now checks that responsible intent, project promises, design and capability decisions, Work Map, executable behavior, and human feedback loop form an intact chain, and looks for omission, substitution, drift, unsupported leaps, blindness, and ownerless gaps.
|
|
14
|
+
- Added staged visibility and review guidance to the project template and active-Task execution protocol. Tasks should prefer human-visible acceptance evidence, the Agent should show real working things at milestones, run `loom check` and project tests together before declaring a batch done, and prioritize reaching an exciting surface early to sustain the human's momentum.
|
|
15
|
+
- Strengthened capability source validation: `loom capability synthesize` now requires each decision-tree node's `source:` citation to reference a real `.md` file in the dossier's `research/` directory.
|
|
16
|
+
- Added `research/_guide.md` generation in `loom capability research` so Agents know what good research material looks like, what to avoid, and how to cite sources.
|
|
17
|
+
- Added `.loom/STRUCTURE.md` as a fifth project-truth layer declaring where source code, tests, docs, assets, and configuration files live. `loom check` warns when it is missing or still templated.
|
|
18
|
+
- Added `loom decision --json-file` for recording consequential superseding decisions with affected files and tasks. `loom check` warns when a done Task is marked affected by a later decision.
|
|
19
|
+
- Added `acceptance[]` as the primary Task completion structure, pairing `criterion`, `verify_by`, and `evidence`. Legacy `done_when[]` remains supported.
|
|
20
|
+
- Added Keeper auto-pass: when all Keeper gaps are minor and 3 or fewer, fixing them and running `loom project ready` auto-passes without another Keeper round.
|
|
21
|
+
- Added deliverable coverage tracking through `loom deliverable add` and Task `covers` field. `loom check` reports uncovered delivery units.
|
|
22
|
+
- Added `loom capability research → synthesize → confirm` lifecycle with status tracking per dossier.
|
|
23
|
+
- Updated help text with a typical first-pass flow and capability lifecycle sequence.
|
|
24
|
+
|
|
25
|
+
## 2.0.1
|
|
26
|
+
|
|
27
|
+
- Added an active-Task execution protocol that restores workspace-aware coding guidance, risk-based testing, restartable progress, criterion-level proof, and conditional commit/PR boundaries after context resets.
|
|
28
|
+
- Strengthened the generated `AGENTS.md` anchor so Agents reload LOOM at project entry, after context loss, and before resumed editing without invoking it before every tool call.
|
|
29
|
+
|
|
3
30
|
## 2.0.0
|
|
4
31
|
|
|
5
32
|
- Rebuilt LOOM as invisible Agent infrastructure around project understanding, a scalable design-document graph, separate professional-field dossiers, a broad Work Map, and one active Task.
|
package/CONTRIBUTING.md
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
# Contributing to LOOM
|
|
2
|
-
|
|
3
|
-
LOOM should become simpler when it changes. A contribution is strongest when it preserves the natural
|
|
4
|
-
human–Agent conversation, keeps project truth inspectable on disk, and proves its effect without adding
|
|
5
|
-
another ritual.
|
|
6
|
-
|
|
7
|
-
## Before changing code
|
|
8
|
-
|
|
9
|
-
1. Read [the system design](design.md) and [the UX loop](docs/UX_FLOW.md).
|
|
10
|
-
2. Run the current suite and CLI locally:
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
npm test
|
|
14
|
-
node cli/bin/loom.js --help
|
|
15
|
-
node cli/bin/loom.js prompts
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
3. Keep a change inside one observable problem. If a contract or stored shape changes, update its design,
|
|
19
|
-
prompt, help text, and tests together.
|
|
20
|
-
|
|
21
|
-
## Pull requests
|
|
22
|
-
|
|
23
|
-
A useful pull request explains:
|
|
24
|
-
|
|
25
|
-
- the user or Agent failure it fixes;
|
|
26
|
-
- the smallest complete change that fixes it;
|
|
27
|
-
- the exact command or artifact that proves the result;
|
|
28
|
-
- any compatibility, migration, or unverified boundary.
|
|
29
|
-
|
|
30
|
-
Prompt changes must remain visible through `loom prompts` and be reflected in
|
|
31
|
-
[`docs/PROMPT_CATALOG.md`](docs/PROMPT_CATALOG.md). Changes that claim better quality need a baseline-relative
|
|
32
|
-
proof; a nicer-looking output alone is not evidence that LOOM caused the improvement.
|
|
33
|
-
|
|
34
|
-
## Release checks
|
|
35
|
-
|
|
36
|
-
Run `npm test` and `npm pack --dry-run` before requesting release. See the
|
|
37
|
-
[release checklist](docs/RELEASE_CHECKLIST.md) for the maintainer flow.
|
|
1
|
+
# Contributing to LOOM
|
|
2
|
+
|
|
3
|
+
LOOM should become simpler when it changes. A contribution is strongest when it preserves the natural
|
|
4
|
+
human–Agent conversation, keeps project truth inspectable on disk, and proves its effect without adding
|
|
5
|
+
another ritual.
|
|
6
|
+
|
|
7
|
+
## Before changing code
|
|
8
|
+
|
|
9
|
+
1. Read [the system design](design.md) and [the UX loop](docs/UX_FLOW.md).
|
|
10
|
+
2. Run the current suite and CLI locally:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm test
|
|
14
|
+
node cli/bin/loom.js --help
|
|
15
|
+
node cli/bin/loom.js prompts
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
3. Keep a change inside one observable problem. If a contract or stored shape changes, update its design,
|
|
19
|
+
prompt, help text, and tests together.
|
|
20
|
+
|
|
21
|
+
## Pull requests
|
|
22
|
+
|
|
23
|
+
A useful pull request explains:
|
|
24
|
+
|
|
25
|
+
- the user or Agent failure it fixes;
|
|
26
|
+
- the smallest complete change that fixes it;
|
|
27
|
+
- the exact command or artifact that proves the result;
|
|
28
|
+
- any compatibility, migration, or unverified boundary.
|
|
29
|
+
|
|
30
|
+
Prompt changes must remain visible through `loom prompts` and be reflected in
|
|
31
|
+
[`docs/PROMPT_CATALOG.md`](docs/PROMPT_CATALOG.md). Changes that claim better quality need a baseline-relative
|
|
32
|
+
proof; a nicer-looking output alone is not evidence that LOOM caused the improvement.
|
|
33
|
+
|
|
34
|
+
## Release checks
|
|
35
|
+
|
|
36
|
+
Run `npm test` and `npm pack --dry-run` before requesting release. See the
|
|
37
|
+
[release checklist](docs/RELEASE_CHECKLIST.md) for the maintainer flow.
|
package/EVIL_EVAL.md
CHANGED
|
@@ -1,112 +1,125 @@
|
|
|
1
|
-
# Evil Eval
|
|
2
|
-
|
|
3
|
-
Evil Eval asks a hostile question: does LOOM improve real Agent work, or does it merely generate more process
|
|
4
|
-
that resembles rigor?
|
|
5
|
-
|
|
6
|
-
## Core comparison
|
|
7
|
-
|
|
8
|
-
Each scenario runs two conditions:
|
|
9
|
-
|
|
10
|
-
- Baseline: a normal capable Agent receives the raw brief and all ordinary tools, but no LOOM.
|
|
11
|
-
- LOOM: the same model receives the same raw brief, workspace, tools, user answers, and budget, with LOOM available.
|
|
12
|
-
|
|
13
|
-
The baseline is not weakened. It may inspect files, browse, ask questions, plan, use memory supplied by the host,
|
|
14
|
-
and create any artifacts it normally would. The intended experimental variable is LOOM's protocol and persistent
|
|
15
|
-
state, not permission, information, or model quality.
|
|
16
|
-
|
|
17
|
-
This is the primary causal comparison: **no framework versus LOOM 2**. LOOM 1 may be added as a third regression
|
|
18
|
-
condition when we want to know whether the redesign improved on its ancestor, but it cannot replace the no-framework
|
|
19
|
-
baseline and does not answer whether LOOM itself adds value.
|
|
20
|
-
|
|
21
|
-
## Scenario shape
|
|
22
|
-
|
|
23
|
-
A scenario records:
|
|
24
|
-
|
|
1
|
+
# Evil Eval
|
|
2
|
+
|
|
3
|
+
Evil Eval asks a hostile question: does LOOM improve real Agent work, or does it merely generate more process
|
|
4
|
+
that resembles rigor?
|
|
5
|
+
|
|
6
|
+
## Core comparison
|
|
7
|
+
|
|
8
|
+
Each scenario runs two conditions:
|
|
9
|
+
|
|
10
|
+
- Baseline: a normal capable Agent receives the raw brief and all ordinary tools, but no LOOM.
|
|
11
|
+
- LOOM: the same model receives the same raw brief, workspace, tools, user answers, and budget, with LOOM available.
|
|
12
|
+
|
|
13
|
+
The baseline is not weakened. It may inspect files, browse, ask questions, plan, use memory supplied by the host,
|
|
14
|
+
and create any artifacts it normally would. The intended experimental variable is LOOM's protocol and persistent
|
|
15
|
+
state, not permission, information, or model quality.
|
|
16
|
+
|
|
17
|
+
This is the primary causal comparison: **no framework versus LOOM 2**. LOOM 1 may be added as a third regression
|
|
18
|
+
condition when we want to know whether the redesign improved on its ancestor, but it cannot replace the no-framework
|
|
19
|
+
baseline and does not answer whether LOOM itself adds value.
|
|
20
|
+
|
|
21
|
+
## Scenario shape
|
|
22
|
+
|
|
23
|
+
A scenario records:
|
|
24
|
+
|
|
25
25
|
- the identical raw brief;
|
|
26
26
|
- workspace setup and immutable snapshot;
|
|
27
27
|
- hidden user facts and a deterministic answer script;
|
|
28
|
+
- human-channel availability (`available` or `unavailable`), identical across conditions;
|
|
28
29
|
- success criteria that judges can observe;
|
|
29
|
-
- context-reset points;
|
|
30
|
-
- equal token, time, and tool budgets;
|
|
31
|
-
- at least three repetitions per condition.
|
|
32
|
-
|
|
33
|
-
High-signal scenarios include ambiguous greenfield work, changes to an existing project, multidisciplinary
|
|
34
|
-
personalized products, operational command work, and a mid-project user correction that supersedes an earlier
|
|
35
|
-
decision.
|
|
36
|
-
|
|
37
|
-
## The evil parts
|
|
38
|
-
|
|
39
|
-
1. Force a context reset after clarification and again mid-Task.
|
|
40
|
-
2. Include one attractive but wrong implementation assumption.
|
|
41
|
-
3. Include a professional domain where generic advice is plausible but harmful.
|
|
42
|
-
4. Change one consequential user answer after the first plan is formed.
|
|
43
|
-
5. Give both conditions equal access to discoverable repository facts.
|
|
44
|
-
6. Penalize unnecessary questions, ceremony, document volume, time, and token cost.
|
|
30
|
+
- context-reset points;
|
|
31
|
+
- equal token, time, and tool budgets;
|
|
32
|
+
- at least three repetitions per condition.
|
|
33
|
+
|
|
34
|
+
High-signal scenarios include ambiguous greenfield work, changes to an existing project, multidisciplinary
|
|
35
|
+
personalized products, operational command work, and a mid-project user correction that supersedes an earlier
|
|
36
|
+
decision.
|
|
37
|
+
|
|
38
|
+
## The evil parts
|
|
39
|
+
|
|
40
|
+
1. Force a context reset after clarification and again mid-Task.
|
|
41
|
+
2. Include one attractive but wrong implementation assumption.
|
|
42
|
+
3. Include a professional domain where generic advice is plausible but harmful.
|
|
43
|
+
4. Change one consequential user answer after the first plan is formed.
|
|
44
|
+
5. Give both conditions equal access to discoverable repository facts.
|
|
45
|
+
6. Penalize unnecessary questions, ceremony, document volume, time, and token cost.
|
|
45
46
|
7. Require an implementation attempt or operational transcript; documents alone cannot win.
|
|
46
47
|
|
|
47
|
-
##
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
judge
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
48
|
+
## Unattended external benchmarks
|
|
49
|
+
|
|
50
|
+
An external benchmark such as a terminal-use suite may provide no human response channel. In that condition,
|
|
51
|
+
set `human_channel` to `unavailable` for both arms. Neither arm may invent a user answer or treat web search as
|
|
52
|
+
a substitute for user intent, preference, or authority. Both may inspect the workspace and use only the research
|
|
53
|
+
tools the benchmark makes available; unresolved consequential choices require a bounded reversible assumption or
|
|
54
|
+
a block.
|
|
55
|
+
|
|
56
|
+
Run LOOM with `--state-dir` pointing outside the scored workspace. The sidecar must be fresh per run and passed
|
|
57
|
+
to every LOOM command, so `.loom/` state cannot alter task files or hidden-test behavior.
|
|
58
|
+
|
|
59
|
+
## Measures
|
|
60
|
+
|
|
61
|
+
Every score cites observable evidence:
|
|
62
|
+
|
|
63
|
+
| Measure | What it asks |
|
|
64
|
+
|---|---|
|
|
65
|
+
| Intent fidelity | Did the result solve the user's actual problem without unauthorized expansion? |
|
|
66
|
+
| Question value | Did questions change decisions, and did the Agent avoid asking discoverable facts? |
|
|
67
|
+
| Whole-project coverage | Were important behaviors, boundaries, dependencies, and failure paths understood? |
|
|
68
|
+
| Capability depth | Did specialist knowledge produce a distinctive project decision rather than a summary? |
|
|
69
|
+
| Buildability | Could a fresh Agent select and begin the right work without guessing? |
|
|
70
|
+
| Reset continuity | What important truth survived forced context loss? |
|
|
71
|
+
| User burden | How much unnecessary explanation, questioning, and framework operation reached the human? |
|
|
72
|
+
| Cost and time | Was any quality gain worth its added tokens, latency, and artifacts? |
|
|
73
|
+
|
|
74
|
+
## Blinding and repetition
|
|
75
|
+
|
|
76
|
+
Runs are anonymized. A fresh judge receives A and B in randomized order without framework names. The judge scores
|
|
77
|
+
both, then receives the order swapped and judges again. Order-sensitive conclusions are marked unstable. Each
|
|
78
|
+
condition runs at least three times because a single model trajectory cannot distinguish a system effect from luck.
|
|
79
|
+
|
|
80
|
+
Anonymization may replace condition labels and framework metadata, but it must preserve each runnable artifact's
|
|
81
|
+
internal directory names and relative paths. Before the judge sees a packet, the harness records a source digest/file
|
|
82
|
+
manifest and reruns the condition's declared tests and smoke commands from the anonymized location. A missing file or
|
|
83
|
+
path failure introduced by copying is a harness failure, not a condition failure; repair the packet and rerun the judge
|
|
84
|
+
while preserving the erroneous first judgment as audit evidence.
|
|
85
|
+
|
|
86
|
+
Human judgment should be used for product taste or domain harm when an automated judge cannot observe it. An LLM
|
|
87
|
+
judge may organize evidence but does not become ground truth by being verbose.
|
|
88
|
+
|
|
89
|
+
## Ablations
|
|
90
|
+
|
|
91
|
+
If full LOOM wins, run smaller comparisons to find the causal mechanism:
|
|
92
|
+
|
|
93
|
+
- Task persistence only;
|
|
94
|
+
- project whole plus Task persistence;
|
|
95
|
+
- capability dossiers without the clarification protocol;
|
|
96
|
+
- full LOOM without forced resets.
|
|
97
|
+
|
|
98
|
+
LOOM should keep only mechanisms whose benefit survives ablation. If the same result comes from a smaller subset,
|
|
99
|
+
delete the rest.
|
|
100
|
+
|
|
101
|
+
## CLI scaffold
|
|
102
|
+
|
|
103
|
+
Create a scenario description:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"id": "EVAL-001",
|
|
96
108
|
"title": "Ambiguous multidisciplinary build",
|
|
97
109
|
"brief": "Build a calming recovery tool from this repository.",
|
|
98
110
|
"hidden_user_facts": ["The user must retain manual control."],
|
|
111
|
+
"human_channel": "available",
|
|
99
112
|
"success_criteria": ["A fresh Agent resumes correctly after a forced reset."],
|
|
100
|
-
"context_reset_points": ["after-shaping", "mid-task"],
|
|
101
|
-
"repetitions": 3
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Then run:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
loom eval scaffold --json-file scenario.json
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
LOOM writes a manifest, equalized condition prompts, and a blind judge prompt under `.loom/eval/<scenario>/`.
|
|
112
|
-
Launching isolated Agents remains host-specific; do not claim the evaluation ran merely because the scaffold exists.
|
|
113
|
+
"context_reset_points": ["after-shaping", "mid-task"],
|
|
114
|
+
"repetitions": 3
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Then run:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
loom eval scaffold --json-file scenario.json
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
LOOM writes a manifest, equalized condition prompts, and a blind judge prompt under `.loom/eval/<scenario>/`.
|
|
125
|
+
Launching isolated Agents remains host-specific; do not claim the evaluation ran merely because the scaffold exists.
|