@haaaiawd/loom 2.0.1 → 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 +32 -10
- package/EVIL_EVAL.md +22 -9
- package/README.md +40 -19
- package/README.zh-CN.md +27 -12
- package/cli/bin/loom.js +78 -4
- package/cli/src/protocol.js +387 -101
- package/cli/src/store.js +417 -62
- package/design.md +19 -4
- package/docs/PROMPT_CATALOG.md +16 -6
- package/docs/UX_FLOW.md +18 -5
- package/package.json +1 -1
package/design.md
CHANGED
|
@@ -137,9 +137,10 @@ The CLI has six responsibilities:
|
|
|
137
137
|
1. Initialize the minimal project backbone.
|
|
138
138
|
2. Record structured understanding and decision history safely.
|
|
139
139
|
3. Scaffold a scalable design-document graph and separate professional-field dossiers.
|
|
140
|
-
4. Maintain a large Work Map and a single active Task.
|
|
141
|
-
5. Compile only decision-relevant context after reset.
|
|
142
|
-
6.
|
|
140
|
+
4. Maintain a large Work Map and a single active Task.
|
|
141
|
+
5. Compile only decision-relevant context after reset.
|
|
142
|
+
6. Adapt clarification to whether a human response channel is actually available.
|
|
143
|
+
7. Prepare one-time Keeper and controlled Evil Eval artifacts.
|
|
143
144
|
|
|
144
145
|
It does not orchestrate models, browse the web, generate project documents, or pretend that a CLI command
|
|
145
146
|
clears model memory. Those capabilities belong to the host Agent and its tools.
|
|
@@ -164,7 +165,7 @@ generic updates cannot change status, and completion requires criterion-by-crite
|
|
|
164
165
|
|
|
165
166
|
## Context selection
|
|
166
167
|
|
|
167
|
-
`loom context` always injects:
|
|
168
|
+
`loom context` always injects:
|
|
168
169
|
|
|
169
170
|
- the stable Agent protocol;
|
|
170
171
|
- compact state counts and open uncertainty;
|
|
@@ -172,6 +173,20 @@ generic updates cannot change status, and completion requires criterion-by-crite
|
|
|
172
173
|
- the active Task, if one exists;
|
|
173
174
|
- the exact design, capability, source, contract, or fixture files named in that Task's `reads` list.
|
|
174
175
|
|
|
176
|
+
### Environment adaptation and isolated state
|
|
177
|
+
|
|
178
|
+
The host supplies human-channel availability at context time. With `available` (the default), the Agent may
|
|
179
|
+
ask the human for consequential intent, preference, authority, or facts that only they hold. With
|
|
180
|
+
`unavailable`, it must not fabricate a user exchange or replace an intent/authority question with web search.
|
|
181
|
+
It first inspects discoverable workspace facts and permitted tools, researches only objective external facts when
|
|
182
|
+
the task allows it, then records a bounded assumption and chooses a safe reversible action or blocks on
|
|
183
|
+
unavailable authority.
|
|
184
|
+
|
|
185
|
+
`--state-dir <outside-workspace-dir>` places LOOM's state tree in a per-run sidecar rather than the workspace.
|
|
186
|
+
This is for benchmark or sandbox runners whose scored workspace must remain pristine. The sidecar remains
|
|
187
|
+
semantically `.loom/` to LOOM documents and Task references, but initialization does not edit the workspace
|
|
188
|
+
or add an AGENTS.md anchor. Every command in that run must receive the same state directory.
|
|
189
|
+
|
|
175
190
|
When a Task is active, context also injects a short execution protocol. It tells a reset Agent to reconcile
|
|
176
191
|
the Task with the current workspace and version-control state, inspect relevant tests before editing, choose
|
|
177
192
|
verification according to risk and the exact `done_when` claims, persist `completed/current/next` at meaningful
|
package/docs/PROMPT_CATALOG.md
CHANGED
|
@@ -12,17 +12,23 @@ order as JSON, so documentation cannot quietly describe a different prompt from
|
|
|
12
12
|
|
|
13
13
|
## Instruction layers
|
|
14
14
|
|
|
15
|
-
| Layer | Message | Injected when | Purpose |
|
|
16
|
-
|---|---|---|---|
|
|
15
|
+
| Layer | Message | Injected when | Purpose |
|
|
16
|
+
|---|---|---|---|
|
|
17
17
|
| Stable core | `layers.stable_core` | Every `loom context` | Durable collaboration judgment: user ownership, evidence classes, question threshold, corrections, reversible delegation |
|
|
18
|
+
| Environment adaptation | `layers.environment_adaptation_available` or `layers.environment_adaptation_unavailable` | Every `loom context` | States whether a human can answer; routes uncertainty through inspection, permitted factual research, clarification, bounded assumption, or block |
|
|
18
19
|
| Runtime adaptation | `layers.runtime_protocol` | Every `loom context` | LOOM-specific disk model, document graph, capability boundaries, Work Map, and three production loops |
|
|
19
20
|
| Project state | `layers.project_state` | Every `loom context` | Dynamic status, uncertainty, assumptions, document/capability inventory, Task counts, and Keeper feedback |
|
|
20
21
|
| Execution protocol | `layers.execution_protocol` | Active Task or `--task` | Recovery, workspace inspection, risk-based testing, progress persistence, exact proof, and delivery boundaries |
|
|
21
22
|
| Current task | `layers.current_task` | Active Task or `--task` | Exact Task JSON followed by the exact contents of every path in `reads` |
|
|
22
23
|
|
|
23
24
|
This separation is deliberate. Project-specific expertise does not inflate the stable prompt; it lives in
|
|
24
|
-
field dossiers. One-off Task instructions do not become global doctrine. Host permissions and tools are not
|
|
25
|
-
claimed by prompt text.
|
|
25
|
+
field dossiers. One-off Task instructions do not become global doctrine. Host permissions and tools are not
|
|
26
|
+
claimed by prompt text.
|
|
27
|
+
|
|
28
|
+
When the human channel is unavailable, the environment message explicitly forbids fabricated user interaction and
|
|
29
|
+
forbids treating web research as a substitute for user intent, preference, or authority. It preserves factual
|
|
30
|
+
research when the task and host actually permit it, then requires a reversible assumption or block for what cannot
|
|
31
|
+
be learned.
|
|
26
32
|
|
|
27
33
|
## Workspace and document messages
|
|
28
34
|
|
|
@@ -71,8 +77,12 @@ new digest, and another fresh Keeper.
|
|
|
71
77
|
`evaluation.baseline_condition` gives a normal capable Agent the identical brief and ordinary tools without
|
|
72
78
|
LOOM. It does not weaken the baseline or prohibit normal planning.
|
|
73
79
|
|
|
74
|
-
`evaluation.loom_condition` gives the same brief, model class, tools, workspace facts, and budget, adding only
|
|
75
|
-
LOOM continuity infrastructure and no extra authority.
|
|
80
|
+
`evaluation.loom_condition` gives the same brief, model class, tools, workspace facts, and budget, adding only
|
|
81
|
+
LOOM continuity infrastructure and no extra authority.
|
|
82
|
+
|
|
83
|
+
`evaluation.unattended_baseline_condition` and `evaluation.unattended_loom_condition` are the same two
|
|
84
|
+
conditions when no user response channel exists. The environment fact is equal in both arms; only the LOOM arm
|
|
85
|
+
uses `loom context --human-channel unavailable`.
|
|
76
86
|
|
|
77
87
|
`evaluation.blind_judge` scores anonymized output on intent fidelity, question value, whole coverage,
|
|
78
88
|
professional depth, buildability, reset continuity, implementation evidence, human burden, and cost. It
|
package/docs/UX_FLOW.md
CHANGED
|
@@ -56,8 +56,17 @@ details that do not affect the current whole, or framework questions whose only
|
|
|
56
56
|
| `I don't know` | Research or decide when safe; ask again only if the human owns the missing preference or authority |
|
|
57
57
|
| `Skip questions and continue` | Name the concrete quality or risk loss, record skipped uncertainty, then proceed |
|
|
58
58
|
|
|
59
|
-
After every answer round, the Agent re-evaluates the whole. If material uncertainty remains, it loops to another adaptive
|
|
60
|
-
round. If only reversible local uncertainty remains, it continues.
|
|
59
|
+
After every answer round, the Agent re-evaluates the whole. If material uncertainty remains, it loops to another adaptive
|
|
60
|
+
round. If only reversible local uncertainty remains, it continues.
|
|
61
|
+
|
|
62
|
+
### When no human response channel exists
|
|
63
|
+
|
|
64
|
+
Some unattended, sandboxed, or benchmark runs have no human to answer. The host invokes
|
|
65
|
+
`loom context --human-channel unavailable`; this does not create a synthetic user. The Agent first inspects
|
|
66
|
+
discoverable workspace facts and permitted tools, researches only objective external facts when the task permits it,
|
|
67
|
+
and never treats web research as a substitute for user intent, preference, or authority. It records a bounded
|
|
68
|
+
assumption and selects a safe reversible action, or blocks if the missing answer controls irreversible, high-risk,
|
|
69
|
+
or materially costly work.
|
|
61
70
|
|
|
62
71
|
## 3. Build project-specific capability
|
|
63
72
|
|
|
@@ -163,9 +172,13 @@ human authority govern later changes.
|
|
|
163
172
|
|
|
164
173
|
## Primary evaluation question
|
|
165
174
|
|
|
166
|
-
The causal baseline is a normal capable Agent with no LOOM—not LOOM v1. Both conditions receive the same raw brief, model,
|
|
167
|
-
tools, workspace, user oracle, budget, and reset schedule. LOOM v1 may be added as a secondary regression condition, but it does
|
|
168
|
-
not answer whether the framework itself creates value over no framework.
|
|
175
|
+
The causal baseline is a normal capable Agent with no LOOM—not LOOM v1. Both conditions receive the same raw brief, model,
|
|
176
|
+
tools, workspace, human-channel availability, user oracle when one exists, budget, and reset schedule. LOOM v1 may be added as a secondary regression condition, but it does
|
|
177
|
+
not answer whether the framework itself creates value over no framework.
|
|
178
|
+
|
|
179
|
+
For an unattended external benchmark, both conditions receive `human_channel: unavailable` and no fabricated user
|
|
180
|
+
oracle. A fresh LOOM sidecar sits outside the scored workspace and is passed through `--state-dir` on every LOOM
|
|
181
|
+
command, so framework state cannot alter task files or hidden-test behavior.
|
|
169
182
|
|
|
170
183
|
The anonymization harness must preserve runnable relative layout, record a file/digest manifest, and rerun each condition's
|
|
171
184
|
declared tests and smoke command before judging. Packet-construction failures are eval failures, never evidence against a run.
|