@nurix/etna 0.15.3 → 0.15.4
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/data/harness-index.json +1 -0
- package/data/harnesses/code/CLAUDE.md +3 -3
- package/data/harnesses/code/agents/harness-manager.md +2 -2
- package/data/harnesses/code/agents/spec-mode.md +1 -1
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/kb-agi/harness.json +1 -1
- package/data/harnesses/re/agents/session.md +8 -6
- package/data/harnesses/re/agents/website.md +1 -1
- package/data/harnesses/re/agents/wire-capture.md +7 -5
- package/data/harnesses/re/harness.json +2 -2
- package/package.json +1 -1
package/data/harness-index.json
CHANGED
|
@@ -20,7 +20,7 @@ This is the only step that runs **before** the harness exists; everything below
|
|
|
20
20
|
|
|
21
21
|
## Getting Started
|
|
22
22
|
|
|
23
|
-
- Read **[`docs/
|
|
23
|
+
- Read **[`docs/structure.md`](docs/structure.md)** for the documentation map and folder authority (architecture, features, operations)
|
|
24
24
|
- Read **[`docs/memory/`](docs/memory/)** for agent memory files (one per agent)
|
|
25
25
|
- Ignore **[`README.md`](README.md)** – it's for human reference only
|
|
26
26
|
- Check **[`package.json`](package.json)** for available scripts. Detect the package manager from the lockfile (`pnpm-lock.yaml` → pnpm, `yarn.lock` → yarn, `package-lock.json` → npm) and use the matching command. Don't hardcode a specific manager.
|
|
@@ -134,9 +134,9 @@ Unless explicitly requested:
|
|
|
134
134
|
|
|
135
135
|
## Documentation
|
|
136
136
|
|
|
137
|
-
`docs/structure.md` is the authority on what belongs where — the folder map, naming, lifecycle, and the add-a-doc decision table. Read it before adding or moving a doc; don't restate it here.
|
|
137
|
+
`docs/structure.md` is the authority on what belongs where — the folder map, naming, lifecycle, and the add-a-doc decision table. Read it before adding or moving a doc; don't restate it here. One canonical source per topic — link, don't copy. Only `CLAUDE.md`, `AGENTS.md`, and `README.md` live at the repo root.
|
|
138
138
|
|
|
139
139
|
Maintenance triggers (act on these without re-reading `structure.md`):
|
|
140
140
|
|
|
141
141
|
- After plan completion: add a `docs/history/changelog/` entry + update `docs/history/CHANGELOG.md` (no confirmation; include `Commits:` if multi-commit). Non-plan changes (refactors, fixes, API changes): prompt first.
|
|
142
|
-
- When you add, move, or delete a doc: update `docs/routing.md`
|
|
142
|
+
- When you add, move, or delete a doc: update `docs/routing.md` to match. When you move or rename source files: fix the `owns`/`touches` frontmatter in the owning doc; new docs that own code need `owns`/`touches`/`depends_on`.
|
|
@@ -104,7 +104,7 @@ Table: `| File | Action | From | To | Reason |` (actions: `Move`, `Merge into {t
|
|
|
104
104
|
|
|
105
105
|
Create the folder structure; move/fold/merge/delete per the plan; add `Status:` to plan files; add ownership frontmatter to feature docs (call the `documentation` skill's **frontmatter derivation** for `owns`/`touches`/`depends_on`); merge scattered backlogs into `docs/history/backlog.md`; fix links broken by moves. Scaffold missing mandated files **by calling the `documentation` skill for each template** — you orchestrate, the skill supplies templates:
|
|
106
106
|
|
|
107
|
-
- `docs/
|
|
107
|
+
- `docs/structure.md` (with `harness-version`), `docs/history/CHANGELOG.md`, `docs/history/backlog.md`, `docs/memory/index.md`, `docs/memory/main.md`, `docs/memory/facts/.digest-state.md` (placeholder, "no entries digested yet"), and the repo-root `README.md` (filled from the real lockfile/scripts/layout — **never overwrite an existing root README**).
|
|
108
108
|
|
|
109
109
|
Scaffold `docs/memory/facts/` so the distilled tier has a home from day one: hooks write the raw ledger to `docs/memory/ledger/` (not a scaffold — created mechanically on first event), and the `distiller` digests it down into fact-cards under `docs/memory/facts/`. Without the facts dir + its `.digest-state.md` high-water mark, a freshly-baselined consumer accrues a ledger firehose the distiller has nowhere to land — so seed the empty distilled tier alongside the hook-written ledger tier.
|
|
110
110
|
|
|
@@ -160,7 +160,7 @@ If the user **declines** the advisory rather than running the follow-up, record
|
|
|
160
160
|
|
|
161
161
|
### Step 7 — Verify
|
|
162
162
|
|
|
163
|
-
Confirm all mandated files exist; `structure.md` carries the current `harness-version`; no dead links in `docs/
|
|
163
|
+
Confirm all mandated files exist; `structure.md` carries the current `harness-version`; no dead links in `docs/structure.md`; every plan has a `Status:`; feature docs have ownership frontmatter; no dissolved-version artifacts remain; no docs outside the canonical structure.
|
|
164
164
|
|
|
165
165
|
---
|
|
166
166
|
|
|
@@ -17,7 +17,7 @@ You do NOT write the spec — you return structured research that the main agent
|
|
|
17
17
|
|
|
18
18
|
First, understand the documentation landscape:
|
|
19
19
|
|
|
20
|
-
1. Read `./docs/
|
|
20
|
+
1. Read `./docs/structure.md` to understand the documentation structure
|
|
21
21
|
2. If `./docs/features/README.md` exists, read it to see existing feature specs and where the new spec fits; otherwise glob the feature docs directly
|
|
22
22
|
3. If `./docs/memory/spec-mode.md` exists, read it for feature doc inventory, ownership conflict zones, and lessons from previous research
|
|
23
23
|
4. Read 1-2 existing specs in `./docs/features/` to calibrate format and depth
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: session
|
|
3
3
|
description: Dimension dumper for the LOGGED-IN APP SESSION dimension of the Product Recon Harness — the authenticated runtime behind login. Delegates to the copied-in browser-session playbook (three-pass, P0–P6) to instrument the live product via Chrome MCP and capture its wire protocol, auth, and state model. The deepest and most sensitive dimension; opt-in, user-gated, read-only-by-default. Dispatched during Ingestion (Mode 2) only after the user has a session ready and authorizes it.
|
|
4
|
-
tools: Read, Write, Bash, Glob, Grep
|
|
4
|
+
tools: Read, Write, Bash, Glob, Grep, mcp__claude-in-chrome__tabs_context_mcp, mcp__claude-in-chrome__tabs_create_mcp, mcp__claude-in-chrome__navigate, mcp__claude-in-chrome__read_network_requests, mcp__claude-in-chrome__read_console_messages, mcp__claude-in-chrome__javascript_tool, mcp__claude-in-chrome__get_page_text
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -27,11 +27,13 @@ It is **interactive and gated**, unlike the other six:
|
|
|
27
27
|
the main session with the exact proposed action + estimated cost so the *user* authorizes it
|
|
28
28
|
in chat. Browser instrumentation that changes state must go through that confirmation loop.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
You now hold **read-only Chrome tools**, so you run **Pass 1 (read-only mining) directly** — verify
|
|
31
|
+
the §9.1 preconditions with `mcp__claude-in-chrome__tabs_context_mcp` (live tabs + stable IDs prove
|
|
32
|
+
the extension and CDP are connected), then mine the authenticated surface yourself with
|
|
33
|
+
`read_network_requests` + an in-page `javascript_tool` interceptor. **Pass 2 (any state-changing /
|
|
34
|
+
cost-incurring action) is NOT yours to trigger** — return to the **main session** with the proposed
|
|
35
|
+
action + estimated cost so the *user* authorizes it in chat (the confirmation loop above). The main
|
|
36
|
+
session still owns the user dialogue and any state-changing instrumentation.
|
|
35
37
|
|
|
36
38
|
## Output (the playbook's own contract — richer than the standard dump)
|
|
37
39
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: website
|
|
3
3
|
description: Dimension dumper for the MARKETING WEBSITE dimension of the Product Recon Harness — homepage, product/feature pages, pricing, customers, integrations, blog index. Extracts positioning, feature claims, pricing tiers/limits, target market, and the integration list. Dispatched during Ingestion (Mode 2).
|
|
4
|
-
tools: Read, Write, Bash, WebFetch, WebSearch
|
|
4
|
+
tools: Read, Write, Bash, WebFetch, WebSearch, mcp__claude-in-chrome__tabs_create_mcp, mcp__claude-in-chrome__navigate, mcp__claude-in-chrome__get_page_text
|
|
5
5
|
model: inherit
|
|
6
6
|
skills:
|
|
7
7
|
- fetch
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wire-capture
|
|
3
3
|
description: Dimension dumper for the GATED WIRE-CAPTURE dimension of the Product Recon Harness. Climbs the 3-rung lowest-privilege-first ladder (browser tap → HAR → user-run mitmproxy) to record what a non-browser/no-source client *actually* calls, redacting every body before disk. Dispatched during Ingestion (Mode 2) — not invoked directly by users.
|
|
4
|
-
tools: Read, Write, Bash
|
|
4
|
+
tools: Read, Write, Bash, mcp__claude-in-chrome__tabs_context_mcp, mcp__claude-in-chrome__tabs_create_mcp, mcp__claude-in-chrome__navigate, mcp__claude-in-chrome__read_network_requests, mcp__claude-in-chrome__read_console_messages, mcp__claude-in-chrome__javascript_tool, mcp__claude-in-chrome__get_page_text
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -13,10 +13,12 @@ first — especially **§7.1** (the 3-rung ladder), §6 (the shared api-path-cat
|
|
|
13
13
|
redaction rules. You obey it absolutely. This is the **runtime complement** to
|
|
14
14
|
`distribution-artifacts`: the binary says what hosts it *might* call; you record what it *does*.
|
|
15
15
|
|
|
16
|
-
This dimension is **GATED**.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
This dimension is **GATED at rungs 2–3**. You now hold read-only Chrome tools, so **rung 1 — the
|
|
17
|
+
public, unauth browser tap — you run directly**: open the public surface in a tab and tap it with
|
|
18
|
+
`mcp__claude-in-chrome__read_network_requests` + an in-page `mcp__claude-in-chrome__javascript_tool`
|
|
19
|
+
interceptor. **Rungs 2–3 stay interactive and user-run** — the user routes their own client and you
|
|
20
|
+
ingest the exported HAR / flows. Author the captures, and **flag higher rungs for user
|
|
21
|
+
authorization** rather than escalating on your own.
|
|
20
22
|
|
|
21
23
|
## Inputs (from the dispatch prompt)
|
|
22
24
|
- target slug + the output dir `research/<target>/dimensions/wire-capture/`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nurix/etna",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.4",
|
|
4
4
|
"description": "Bootstrap a project with a Nurix harness — copies the harness's CLAUDE.md, skills, agents, rules, and hooks directly into the project from a bundled payload (no marketplace fetch, no network).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|