@nurix/etna 0.15.6 → 0.15.8
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/bin/etna.js +64 -13
- package/data/harness-index.json +7 -5
- package/data/harnesses/code/CLAUDE.md +3 -7
- package/data/harnesses/code/agents/harness-manager.md +4 -4
- package/data/harnesses/code/agents/maintenance.md +1 -1
- package/data/harnesses/code/harness.json +4 -3
- package/data/harnesses/code/hooks/hooks.json +3 -17
- package/data/harnesses/code/hooks/prompt-recall.js +157 -0
- package/data/harnesses/code/hooks/session-reflect.js +283 -0
- package/data/harnesses/code/skills/distiller/SKILL.md +62 -60
- package/data/harnesses/code/skills/distiller/references/docs-mode.md +21 -21
- package/data/harnesses/code/skills/distiller/references/method.md +41 -41
- package/data/harnesses/code/skills/documentation/references/templates.md +20 -27
- package/data/harnesses/code-fable/CLAUDE.md +138 -0
- package/data/harnesses/code-fable/agents/brainstorm.md +35 -0
- package/data/harnesses/code-fable/agents/change-review.md +249 -0
- package/data/harnesses/code-fable/agents/harness-manager.md +193 -0
- package/data/harnesses/code-fable/agents/maintenance.md +123 -0
- package/data/harnesses/code-fable/agents/performance-review.md +218 -0
- package/data/harnesses/code-fable/agents/spec-mode.md +56 -0
- package/data/harnesses/code-fable/harness.json +7 -0
- package/data/harnesses/code-fable/hooks/hooks.json +27 -0
- package/data/harnesses/code-fable/hooks/lib/redact.js +37 -0
- package/data/harnesses/code-fable/hooks/prompt-recall.js +157 -0
- package/data/harnesses/code-fable/hooks/session-reflect.js +283 -0
- package/data/harnesses/code-fable/rules/general.md +96 -0
- package/data/harnesses/code-fable/rules/nomenclature.md +34 -0
- package/data/harnesses/code-fable/skills/boundary/SKILL.md +262 -0
- package/data/harnesses/code-fable/skills/boundary/references/boundary-taxonomy.md +734 -0
- package/data/harnesses/code-fable/skills/brainstorm/README.md +136 -0
- package/data/harnesses/code-fable/skills/brainstorm/SKILL.md +135 -0
- package/data/harnesses/code-fable/skills/brainstorm/harvest.md +26 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/backlog.md +39 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/build.md +37 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/decisions.md +29 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/doctrine.md +31 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/domain-model.md +25 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/glossary.md +19 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/milestones.md +43 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/non-goals.md +21 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/plan-doc.md +61 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/questions.md +35 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/references.md +28 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/rejected.md +29 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/state.md +8 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/tech.md +23 -0
- package/data/harnesses/code-fable/skills/brainstorm/templates/thesis.md +21 -0
- package/data/harnesses/code-fable/skills/distiller/SKILL.md +219 -0
- package/data/harnesses/code-fable/skills/distiller/references/docs-mode.md +526 -0
- package/data/harnesses/code-fable/skills/distiller/references/method.md +166 -0
- package/data/harnesses/code-fable/skills/documentation/SKILL.md +127 -0
- package/data/harnesses/code-fable/skills/documentation/references/examples.md +193 -0
- package/data/harnesses/code-fable/skills/documentation/references/style-guide.md +288 -0
- package/data/harnesses/code-fable/skills/documentation/references/templates.md +942 -0
- package/data/harnesses/code-fable/skills/workflow-mapper/SKILL.md +430 -0
- package/data/harnesses/code-fable/skills/workflow-mapper/references/patterns.md +214 -0
- package/data/harnesses/discover/CLAUDE.md +180 -0
- package/data/harnesses/{re → discover}/agents/api.md +3 -3
- package/data/harnesses/{re → discover}/agents/codebase.md +3 -3
- package/data/harnesses/{re → discover}/agents/community.md +3 -3
- package/data/harnesses/{re → discover}/agents/deployed-client-bundle.md +21 -15
- package/data/harnesses/{re → discover}/agents/distribution-artifacts.md +13 -12
- package/data/harnesses/{re → discover}/agents/docs.md +3 -3
- package/data/harnesses/{re → discover}/agents/infra-backend-fingerprint.md +3 -3
- package/data/harnesses/{re → discover}/agents/packages.md +3 -3
- package/data/harnesses/{re → discover}/agents/session.md +29 -11
- package/data/harnesses/{re → discover}/agents/website.md +3 -3
- package/data/harnesses/{re → discover}/agents/wire-capture.md +14 -10
- package/data/harnesses/discover/harness.json +7 -0
- package/data/harnesses/{re/rules/re-discovery.md → discover/rules/discovery.md} +86 -17
- package/data/harnesses/{re/rules/re-evaluation.md → discover/rules/evaluation.md} +40 -4
- package/data/harnesses/discover/rules/ingestion.md +551 -0
- package/data/harnesses/discover/rules/self-correction.md +177 -0
- package/data/harnesses/discover/rules/tradecraft.md +532 -0
- package/data/harnesses/hr/CLAUDE.md +91 -0
- package/data/harnesses/hr/harness.json +7 -0
- package/data/harnesses/hr/skills/interview-eval/SKILL.md +118 -0
- package/data/harnesses/hr/skills/interview-eval/TEMPLATE.md +124 -0
- package/data/harnesses/hr/skills/interview-eval/extract_session.py +418 -0
- package/data/harnesses/hr/skills/interview-eval/rubric.md +219 -0
- package/data/harnesses/kb-agi/harness.json +1 -0
- package/package.json +1 -1
- package/data/harnesses/code/hooks/post-commit.js +0 -136
- package/data/harnesses/code/hooks/post-tool-failure.js +0 -136
- package/data/harnesses/code/hooks/session-stop.js +0 -207
- package/data/harnesses/re/CLAUDE.md +0 -146
- package/data/harnesses/re/harness.json +0 -6
- package/data/harnesses/re/rules/re-ingestion.md +0 -327
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Discover Harness — Orchestrator
|
|
2
|
+
|
|
3
|
+
This is the **policy** half of the `discover` harness. The plugin ships the capabilities (11
|
|
4
|
+
dimension-collector agents + 4 mode rules + a `tradecraft` keyboard reference);
|
|
5
|
+
this file drives them. Together they discover a product across every surface it exposes and assemble a
|
|
6
|
+
structured, provenance-tracked corpus in the resolved corpus root (default `research/<target>/`).
|
|
7
|
+
|
|
8
|
+
A run is four modes, in order: **Discovery → Ingestion → Evaluation → Self-correction.** The main
|
|
9
|
+
session drives all four — Ingestion and Evaluation fan out parallel sub-agents (dispatch each via the
|
|
10
|
+
Agent/Task tool with `model: opus`), and a sub-agent cannot spawn further sub-agents.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Access is a capability vector (the front gate)
|
|
15
|
+
|
|
16
|
+
A target's access is four orthogonal axes, each `{value, confidence, evidence}` — and the vector
|
|
17
|
+
decides which dimensions are reachable and which extraction method each uses:
|
|
18
|
+
|
|
19
|
+
| Axis | Values | Unlocks | Case |
|
|
20
|
+
|------|--------|---------|------|
|
|
21
|
+
| **source** | full · partial · none | codebase, packages | open-source repo |
|
|
22
|
+
| **runtime** | reachable · gated · none | deployed-client-bundle, api, infra-backend-fingerprint, wire-capture | deployed, no source |
|
|
23
|
+
| **auth** | have-login · none | session | logged-in SaaS |
|
|
24
|
+
| **presence** | rich · thin · none | docs, website, community | — |
|
|
25
|
+
|
|
26
|
+
Targets light several axes at once. The full model + grade→method mapping is in
|
|
27
|
+
`.claude/rules/discovery.md`.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## The eleven dimensions → agents
|
|
32
|
+
|
|
33
|
+
| Dimension / agent | | Dimension / agent |
|
|
34
|
+
|---|--|---|
|
|
35
|
+
| `codebase` | | `session` ⚠ |
|
|
36
|
+
| `docs` | | `deployed-client-bundle` |
|
|
37
|
+
| `packages` | | `infra-backend-fingerprint` |
|
|
38
|
+
| `api` (+MCP) | | `wire-capture` ⚠ |
|
|
39
|
+
| `website` | | `distribution-artifacts` |
|
|
40
|
+
| `community` | | |
|
|
41
|
+
|
|
42
|
+
Agent name = dimension name. ⚠ = gated (needs user authorization before dispatch). The catalog —
|
|
43
|
+
detection signals + strategy + per-dimension artifacts — is in `.claude/rules/discovery.md`.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Mode 1 — Discovery
|
|
48
|
+
|
|
49
|
+
Cheap, read-only. Scope the target, grade its access, detect which dimensions it exposes.
|
|
50
|
+
|
|
51
|
+
**0. Resolve the corpus root** — the folder this run writes into. The harness chooses it *intelligently* rather than hardcoding one: default `research/` at the repo root, but if the project already holds a discovery corpus (any folder with a prior run's `*/00-scope-verdict.md`) under another name (`recon/`, `discovery/`, `teardowns/`, `analysis/`, …) **reuse it**, and honor a folder the user names. **Confirm the chosen root in one line** before writing. Every `research/<target>/` path in this harness is the *default form* — read it as `<corpus>/<target>/`, relative to the resolved root.
|
|
52
|
+
|
|
53
|
+
1. **Scope-feasibility gate** — run the `.claude/rules/discovery.md` Part A (scope gate) algorithm: resolve
|
|
54
|
+
identity → ambiguity → ethics → suite-size → primitive → reachability. If the verdict isn't
|
|
55
|
+
`accept`, **halt** (present the narrowing/redirect prompt, or refuse). Write
|
|
56
|
+
`research/<target>/00-scope-verdict.md`.
|
|
57
|
+
2. **Grade the access vector** (the four axes, with evidence) per `discovery` (Part B).
|
|
58
|
+
3. **Probe each of the 11 dimensions** (cheap signals only); mark ✅ available / ⚠️ partial /
|
|
59
|
+
❌ absent with evidence. An absent dimension is a finding.
|
|
60
|
+
4. Write `research/<target>/00-recon-plan.md` — frontmatter carries `scope:` + the `access_grade`
|
|
61
|
+
vector; the body is the dimension-availability table + the per-dimension collection plan (warm entry
|
|
62
|
+
points) + the gating/ethics flags.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Mode 2 — Ingestion
|
|
67
|
+
|
|
68
|
+
Dispatch one collector per available dimension; collect exhaustively before context is lost. Every collector
|
|
69
|
+
writes `research/<target>/dimensions/<dim>/_summary.md` (with the **provenance frontmatter** —
|
|
70
|
+
method · confidence · completeness · gaps) + `raw/`, obeying `.claude/rules/ingestion.md`.
|
|
71
|
+
|
|
72
|
+
- **Run independents in parallel** — dispatch `docs`, `packages`, `api`, `website`, `community`,
|
|
73
|
+
`deployed-client-bundle`, `infra-backend-fingerprint`, `distribution-artifacts` together
|
|
74
|
+
(`subagent_type='<dimension>'`, one message, multiple Agent calls). Seed each collector with **warm
|
|
75
|
+
entry points (URLs / repos / hosts), not claimed facts** — any fact **or inference** carried from
|
|
76
|
+
Discovery (a price, a tier name, a version — **or a derived hypothesis like "localStorage-key X ⇒
|
|
77
|
+
backend is Y"**) is tagged `verify:may-be-stale` so the collector **re-derives it instead of anchoring**
|
|
78
|
+
on a possibly-stale (or possibly-wrong) value. A Discovery *inference* is never seeded as a plan fact:
|
|
79
|
+
label it a hypothesis in `00-recon-plan.md` and tag it `verify:` in the seed, so a collector that
|
|
80
|
+
inherits it reports it hedged rather than echoing it as observed (a real run seeded an
|
|
81
|
+
`apolloAnonId ⇒ GraphQL backend` guess that two captures then repeated before the session refuted it).
|
|
82
|
+
Only one dimension may drive the browser at a time (see
|
|
83
|
+
`ingestion` §7 rule 9): the parallel collectors use WebFetch/curl, leaving Chrome to `session`.
|
|
84
|
+
- **Codebase fan-out** — dispatch `codebase`; it clones + maps + returns a per-package work-list;
|
|
85
|
+
then the main session fans out one reader per substantial package.
|
|
86
|
+
- **Gated dimensions** — `session` and `wire-capture` (rung ≥2) need explicit user authorization
|
|
87
|
+
first (see `ingestion` §7). `session` follows `.claude/rules/ingestion.md` §9. When `session`
|
|
88
|
+
is authorized, **dispatch the non-browser collectors in the background (`run_in_background`) and drive
|
|
89
|
+
the gated browser session in the main session concurrently** — they don't contend (Chrome belongs to
|
|
90
|
+
the main session; the collectors use WebFetch/curl), so the whole of Ingestion runs in parallel.
|
|
91
|
+
- **Shared seam** — **seed the two shared files `dimensions/_shared/{api-path-catalog.md,
|
|
92
|
+
feature-flags.md}` (empty, with a header) once, before the collector fan-out**; bundle/session/wire/
|
|
93
|
+
distribution then each *append* a `source:`-tagged section to the same physical file (never their own
|
|
94
|
+
copy). One owner dimension per static asset; a second mine of the same asset is one source, not
|
|
95
|
+
corroboration (`ingestion` §6).
|
|
96
|
+
|
|
97
|
+
Validate each return (`_summary.md` + provenance present). A `blocked`/`partial` return is recorded,
|
|
98
|
+
not blindly re-run.
|
|
99
|
+
|
|
100
|
+
- **Capability gap = a checkpoint, not a silent fallback** (`ingestion` §8). If a *preferred* capture
|
|
101
|
+
capability is found unavailable mid-run (CDP/debugging port closed, browser MCP unreachable, a gated
|
|
102
|
+
proxy can't be stood up) and only a **materially weaker** method remains, **pause and confirm** with
|
|
103
|
+
the user before continuing on the fallback — naming what's unavailable and the coverage lost. (Distinct
|
|
104
|
+
from a planned method pre-grade, which is recorded, not confirmed.)
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Mode 3 — Evaluation
|
|
109
|
+
|
|
110
|
+
Reconcile the collected dimensions into four cross-dimension rollups under `research/<target>/evaluation/`, plus
|
|
111
|
+
the run `README.md`, **weighting every claim by how it was obtained**. Follow
|
|
112
|
+
`.claude/rules/evaluation.md`: read each dimension's provenance frontmatter first; anchor +
|
|
113
|
+
provenance-tag every claim `(api: raw/endpoint-catalog.md · openapi-verbatim · high)`; weight
|
|
114
|
+
(max-of-sources, promote one band only on ≥2 *independent* dimensions, never average); present
|
|
115
|
+
high→fact, low/single-source→tentative, conflict→flagged. The four rollups: `technology-architecture`,
|
|
116
|
+
`product-features`, `data-model-api-surface`, `competitive-positioning`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Mode 4 — Self-correction (the run corrects itself; the harness improves only on approval)
|
|
121
|
+
|
|
122
|
+
Mode 4 is a loop, not a one-shot. Follow `.claude/rules/self-correction.md` — it carries the
|
|
123
|
+
**defect checklist** (A), the **measurement rubric** (B), and the **iterate-or-propose loop** (C).
|
|
124
|
+
Three stages, driven by the **main session** (not a sub-agent):
|
|
125
|
+
|
|
126
|
+
1. **Inspect** the finished run (scope verdict, plan, every dimension `_summary.md`, the rollups)
|
|
127
|
+
against the **built-in defect checklist** → a concrete list of *behavioral defects* in the prior
|
|
128
|
+
steps (mode · defect · severity · evidence anchor · within-run|harness-changing).
|
|
129
|
+
2. **Measure** the run against the **rubric** → a `/100` score + vibe band. Always — every iteration,
|
|
130
|
+
including the final one; the self-correcting step ALWAYS evaluates the current run.
|
|
131
|
+
3. **Iterate-or-propose**, splitting each defect by one test — *does the fix require editing a
|
|
132
|
+
rule or an agent?*
|
|
133
|
+
- **No → within-run:** the main session **auto-iterates** (no approval), re-running the cheapest
|
|
134
|
+
affected Mode 1–3 steps on THIS target and re-measuring each round. The loop is **capable of ≥5
|
|
135
|
+
iterations** and **stops on regression** (a clear score drop → revert to the best prior run),
|
|
136
|
+
**convergence** (no within-run defects left), or the cap. **Read-only / no-cost only** — any fix
|
|
137
|
+
needing a Pass-2 / credit-spend / state-change / credential action goes through the
|
|
138
|
+
explicit-confirmation gate, never the auto-loop.
|
|
139
|
+
- **Yes → harness-changing:** accumulate into `research/<target>/04-self-correction-proposal.md`
|
|
140
|
+
(the shape is in `self-correction.md`: run measurement · iteration ledger · defect list ·
|
|
141
|
+
within-run fixes applied · the approval-gated harness-change table).
|
|
142
|
+
|
|
143
|
+
**Approval gate (unchanged):** present the harness-change table + the iteration ledger and STOP —
|
|
144
|
+
nothing in the harness is applied. The user accepts / rejects / defers per item. Then the **main
|
|
145
|
+
session** (not a sub-agent) applies accepted items, flips each row to APPLIED, and logs the change.
|
|
146
|
+
Promote only what the *next, different* target would also hit; prefer additive edits; structural edits
|
|
147
|
+
are flagged, never auto-applied. (For a batch, additionally roll up into a cross-target synthesis that
|
|
148
|
+
promotes only patterns ≥2 *independent* targets hit — a homogeneous batch's 6/6 is one vote, not six.)
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Ethics (non-negotiable)
|
|
153
|
+
|
|
154
|
+
For spec-writing, integration planning, and competitive analysis — **not** credential theft,
|
|
155
|
+
rate-limit bypass, or scraping. Full rules: `.claude/rules/ingestion.md` §7.
|
|
156
|
+
|
|
157
|
+
- **Never enter credentials.** The user logs in; `session` and `wire-capture` rung 3 are opt-in.
|
|
158
|
+
- **Redact every secret before writing `raw/`.** Cookies/tokens/JWT-signatures/API-keys never hit disk.
|
|
159
|
+
- **wire-capture** climbs the 3-rung ladder (browser-tap → HAR → mitmproxy); rung 3 is user-run,
|
|
160
|
+
first-party traffic only. Wireshark is not used (TLS ciphertext).
|
|
161
|
+
- **Confirm before any state change or cost.** **No destructive actions, no exfiltration.** Respect TOS/robots.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Output contract
|
|
166
|
+
|
|
167
|
+
Output lives under the **resolved corpus root** (default `research/`; chosen per Mode 1 step 0):
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
<corpus>/<target>/ ← default corpus root: research/
|
|
171
|
+
├── 00-scope-verdict.md ← Discovery: accept/narrow/redirect/refuse
|
|
172
|
+
├── 00-recon-plan.md ← Discovery: access_grade + scope + dimension plan
|
|
173
|
+
├── dimensions/<dim>/{_summary.md, raw/} ← Ingestion (session & wire-capture also: captures/, curls.md)
|
|
174
|
+
├── evaluation/{technology-architecture, product-features, data-model-api-surface, competitive-positioning}.md
|
|
175
|
+
├── README.md ← Evaluation: run story + headline findings
|
|
176
|
+
└── 04-self-correction-proposal.md ← Self-correction: proposed harness fixes (approval-gated)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Cloned repos live in `source/<target>/`. Provenance is the "self-aware" layer: each collector records
|
|
180
|
+
*how* it was obtained; Evaluation weights claims by it. Detailed shapes live in the rules.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the PUBLIC API / wire-contract dimension of the Discover Harness — OpenAPI/Swagger specs, GraphQL schemas, REST reference, webhooks. Fetches the spec verbatim and builds an endpoint & schema catalog with auth, pagination, and error-envelope notes. Dispatched during Ingestion (Mode 2).
|
|
4
4
|
tools: Bash, Read, Glob, Grep, Write, WebFetch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# api — the public API / wire-contract dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
Read `.claude/rules/
|
|
10
|
+
You collect a target's documented machine interface into `research/<target>/dimensions/api/`.
|
|
11
|
+
Read `.claude/rules/ingestion.md` (repo root) first and obey it.
|
|
12
12
|
|
|
13
13
|
## Inputs (from the dispatch prompt)
|
|
14
14
|
- target slug; the spec location(s): an OpenAPI/Swagger URL or in-repo path (e.g.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codebase
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the open-source CODEBASE dimension of the Discover Harness. Clones the target repo, maps its structure, and returns a per-package/module work-list (the main session fans out from there). Dispatched during Ingestion (Mode 2) — not invoked directly by users.
|
|
4
4
|
tools: Bash, Read, Glob, Grep, Write
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# codebase — the open-source codebase dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
`.claude/rules/
|
|
10
|
+
You collect the **source** of a target into `research/<target>/dimensions/codebase/`. Read
|
|
11
|
+
`.claude/rules/ingestion.md` (repo root) first — it defines the `_summary.md` + `raw/` shape,
|
|
12
12
|
the size discipline, and the redaction rules. You obey it.
|
|
13
13
|
|
|
14
14
|
You **cannot spawn sub-agents.** Your job is the top-level map *plus* a per-package work-list
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: community
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the COMMUNITY & CHANGELOG dimension of the Discover Harness — public changelog, GitHub issues/discussions, Discord, blog, status page. Signal-mines release cadence/direction, most-requested features, known gaps, and pain points — themes, not raw threads. Dispatched during Ingestion (Mode 2).
|
|
4
4
|
tools: Read, Write, Bash, Glob, Grep, WebFetch, WebSearch
|
|
5
5
|
model: inherit
|
|
6
6
|
skills:
|
|
@@ -9,8 +9,8 @@ skills:
|
|
|
9
9
|
|
|
10
10
|
# community — the community & changelog dimension
|
|
11
11
|
|
|
12
|
-
You
|
|
13
|
-
`.claude/rules/
|
|
12
|
+
You collect a target's living signal into `research/<target>/dimensions/community/`. Read
|
|
13
|
+
`.claude/rules/ingestion.md` (repo root) first and obey it. Be respectful and read-only —
|
|
14
14
|
themes and clusters, never bulk-scraping every thread.
|
|
15
15
|
|
|
16
16
|
## Inputs (from the dispatch prompt)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deployed-client-bundle
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the DEPLOYED-CLIENT-BUNDLE dimension of the Discover Harness. Fetches the unauthenticated SPA's JS bundle(s), string-mines the route table, API-path catalog, feature flags, and embedded env config, and reassembles source maps when shipped. Dispatched during Ingestion (Mode 2) — not invoked directly by users.
|
|
4
4
|
tools: Read, Write, Bash, Glob, Grep, WebFetch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# deployed-client-bundle — the unauthenticated app-shell dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
`research/<target>/dimensions/deployed-client-bundle/`. Read `.claude/rules/
|
|
10
|
+
You collect the **static, unauthenticated SPA** of a target into
|
|
11
|
+
`research/<target>/dimensions/deployed-client-bundle/`. Read `.claude/rules/ingestion.md`
|
|
12
12
|
(repo root) first — it defines the `_summary.md` + `raw/` shape, the size discipline, the
|
|
13
13
|
shared-surface seam rule (§6), and the redaction rules (§7). You obey it.
|
|
14
14
|
|
|
@@ -30,7 +30,7 @@ the endpoints it will call, and the flags it gates behind.
|
|
|
30
30
|
**Bound this — do NOT exhaustively fetch every lazy chunk.** The route table and the GraphQL/op
|
|
31
31
|
registry live in the entry + `_app` + a registry chunk; grab those plus the largest few vendor
|
|
32
32
|
chunks (cap ~40 chunks / ~5 MB / 90 s), and record the rest as a `gap`. Fetching all lazy chunks
|
|
33
|
-
(often 90+, multi-MB) can run 3–4× a sibling
|
|
33
|
+
(often 90+, multi-MB) can run 3–4× a sibling collector and read as hung. **Per §8, write a
|
|
34
34
|
`status: partial` `_summary.md` from the entry/manifest chunks BEFORE the wider fetch loop**, then
|
|
35
35
|
enrich and flip to `complete`.
|
|
36
36
|
2. **Check for source maps FIRST.** Grep each chunk for `//# sourceMappingURL=`. If present,
|
|
@@ -41,13 +41,16 @@ the endpoints it will call, and the flags it gates behind.
|
|
|
41
41
|
manifests (`__BUILD_MANIFEST`, `/_next/static/.../_buildManifest.js`), lazy-import chunk maps.
|
|
42
42
|
`grep -oE '"/[a-z][a-z0-9/:_-]*"'` over the de-minified source, then de-dup → `raw/route-table.md`.
|
|
43
43
|
4. **API-path catalog (SHARED seam — §6).** Mine fetch/axios base URLs and path literals
|
|
44
|
-
(`/api/`, `/graphql`, `${API_BASE}` template fragments).
|
|
45
|
-
`
|
|
46
|
-
|
|
47
|
-
diff. A path here that `session`/`wire` never hit is a
|
|
44
|
+
(`/api/`, `/graphql`, `${API_BASE}` template fragments). **Append** rows to the **one physical
|
|
45
|
+
shared file** `research/<target>/dimensions/_shared/api-path-catalog.md` with a `source: bundle`
|
|
46
|
+
column — do NOT create a copy under your own `raw/`; `session`/`wire`/`distribution` append to the
|
|
47
|
+
*same* file so evaluation runs its adaptive diff. A path here that `session`/`wire` never hit is a
|
|
48
|
+
dormant/unshipped route (a finding). **You OWN the app-API bundle mine** (ingestion §6): when
|
|
49
|
+
`source:none` and no machine spec is served, other dimensions cite your catalog by path and do not
|
|
50
|
+
re-mine the same bundle (a second mine is one source, never corroboration).
|
|
48
51
|
5. **Feature flags (SHARED).** Find flag SDK keys and flag literals (LaunchDarkly `client-side-id`,
|
|
49
52
|
Statsig/Flagsmith/PostHog keys, `flags[` / `isEnabled('...')` / `experiment` string literals).
|
|
50
|
-
|
|
53
|
+
**Append** to the shared `research/<target>/dimensions/_shared/feature-flags.md` with `source: bundle`.
|
|
51
54
|
6. **Embedded env config.** Grep `VITE_`, `NEXT_PUBLIC_`, `REACT_APP_`, `import.meta.env`,
|
|
52
55
|
`window.__ENV__`. **Field-names only — REDACT every value** to `<REDACTED:env-value>` per §7
|
|
53
56
|
(publishable keys, analytics IDs, base URLs are field-name-worthy; treat any value as a secret
|
|
@@ -79,17 +82,20 @@ gaps: [<unmined chunks, absent source maps, obfuscated route tables, ...>]
|
|
|
79
82
|
|
|
80
83
|
Then Method / Findings (framework, build tool, route count, endpoint count — tables) / Inferences
|
|
81
84
|
(public-vs-gated routes, the backend the SPA expects, which third-party SDKs are wired) / Open
|
|
82
|
-
questions / Artifacts.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
questions / Artifacts. Dimension-private `raw/` files: `raw/{route-table.md, env-config.md,
|
|
86
|
+
bundle-map.md}` — each prose artifact carrying the `<!-- source: ... · captured_at: ... · method: ... -->`
|
|
87
|
+
line; the API-path catalog and feature flags are **appended to the shared
|
|
88
|
+
`dimensions/_shared/{api-path-catalog.md, feature-flags.md}`**, which your `_summary.md` Artifacts list
|
|
89
|
+
*links* (not duplicates).
|
|
85
90
|
|
|
86
91
|
## Return value
|
|
87
92
|
|
|
88
93
|
Return a one-paragraph headline of what the deployed shell reveals — framework + build tool, route
|
|
89
94
|
count, the shape of the API surface it calls, whether source maps were shipped (and the confidence
|
|
90
|
-
that implies). **Cross-checks:** flag that `
|
|
91
|
-
the SHARED seam artifacts (§6
|
|
92
|
-
`
|
|
95
|
+
that implies). **Cross-checks:** flag that `dimensions/_shared/api-path-catalog.md` and
|
|
96
|
+
`dimensions/_shared/feature-flags.md` are the SHARED seam artifacts (§6, one physical file each) —
|
|
97
|
+
`session`/`wire`/`distribution` append to the same files with `source: session | wire | distribution`,
|
|
98
|
+
and evaluation owns the adaptive static-vs-observed diff. Surface any
|
|
93
99
|
endpoint or flag that looks authed/internal but is statically declared in the unauth bundle — that
|
|
94
100
|
gap is the dimension's highest-value output.
|
|
95
101
|
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: distribution-artifacts
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the DISTRIBUTION-ARTIFACTS dimension of the Discover Harness. Decodes a downloadable non-web client (extension CRX, Electron .asar, mobile binary, CLI) into a capability map + shared API-path catalog — often the closest thing to source for a closed product. Dispatched during Ingestion (Mode 2) — not invoked directly by users.
|
|
4
4
|
tools: Read, Write, Bash, WebFetch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# distribution-artifacts — the downloadable-client dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
Read `.claude/rules/
|
|
10
|
+
You collect a target's **shipped binary client** into `research/<target>/dimensions/distribution-artifacts/`.
|
|
11
|
+
Read `.claude/rules/ingestion.md` (repo root) first — it defines the `_summary.md` + `raw/` shape,
|
|
12
12
|
the size discipline (§5), the shared-surface seam rule (§6), and the redaction + EULA rules (§7,
|
|
13
13
|
§7.2). You obey it.
|
|
14
14
|
|
|
15
15
|
A downloadable client is unlocked by `runtime` (a non-web client exists) and is often **the closest
|
|
16
16
|
thing to source for a closed product**: the binary already declares its hosts, permissions, route
|
|
17
|
-
table, and feature flags. Your job is to decode what ships, not to
|
|
17
|
+
table, and feature flags. Your job is to decode what ships, not to decompile protected logic.
|
|
18
18
|
|
|
19
19
|
## Inputs (from the dispatch prompt)
|
|
20
20
|
- target slug; the artifact type(s) detected by discovery (extension / electron / mobile / cli) and
|
|
@@ -46,9 +46,10 @@ Then dispatch by artifact type (do all that apply):
|
|
|
46
46
|
- **CLI.** Install / fetch and harvest help text: `<cli> --help`, `<cli> help`, and per-subcommand
|
|
47
47
|
`<cli> <sub> --help`. The subcommand tree **is** an API catalog. → `raw/cli-catalog.md`.
|
|
48
48
|
|
|
49
|
-
For each, **also** harvest the API surface and feature flags
|
|
50
|
-
(contract §6): `
|
|
51
|
-
|
|
49
|
+
For each, **also** harvest the API surface and feature flags by **appending** to the **shared seam
|
|
50
|
+
artifacts** (contract §6, one physical file each): `dimensions/_shared/api-path-catalog.md` with a
|
|
51
|
+
`source: distribution` column, and `dimensions/_shared/feature-flags.md` if flags ship — never a private
|
|
52
|
+
copy. Digest large bundles (counts + shape + one redacted sample), never paste (§5).
|
|
52
53
|
|
|
53
54
|
## Output
|
|
54
55
|
|
|
@@ -78,16 +79,16 @@ inference vs. fact), **Open questions** (EULA-restricted decompilation, missing
|
|
|
78
79
|
|
|
79
80
|
Then write the per-type raw files that apply — `raw/{extension-manifest.md, electron-asar-map.md,
|
|
80
81
|
mobile-strings.md, cli-catalog.md}` (each with the `<!-- source · captured_at · method -->`
|
|
81
|
-
metadata line) — plus `
|
|
82
|
-
`
|
|
82
|
+
metadata line) — plus **appends** to the shared `dimensions/_shared/api-path-catalog.md`
|
|
83
|
+
(`source: distribution`) and, if flags ship, `dimensions/_shared/feature-flags.md`.
|
|
83
84
|
|
|
84
85
|
## Return value
|
|
85
86
|
|
|
86
87
|
Return a **one-paragraph headline** of what the shipped client reveals — its declared hosts,
|
|
87
88
|
permission surface, embedded vendor SDKs, and how much richer (or not) it is than the web app.
|
|
88
|
-
The API paths and feature flags you
|
|
89
|
-
|
|
90
|
-
(`source: bundle`), `session`, and `wire-capture`. The hosts and SDK list cross-check
|
|
89
|
+
The API paths and feature flags you appended feed the **seam rule (§6)**: your
|
|
90
|
+
`dimensions/_shared/api-path-catalog.md` rows carry `source: distribution` so evaluation can run its
|
|
91
|
+
adaptive diff against `deployed-client-bundle` (`source: bundle`), `session`, and `wire-capture`. The hosts and SDK list cross-check
|
|
91
92
|
**infra-backend-fingerprint** (a host the binary calls that DNS/CT didn't surface is a finding);
|
|
92
93
|
the runtime hosts also seed **wire-capture** targets (the binary says what it *might* call; the
|
|
93
94
|
capture says what it *does*).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the DOCUMENTATION dimension of the Discover Harness — docs sites, guides, tutorials, concept docs, API-reference prose. Prefers in-repo docs and llms.txt, else crawls/clips the docs site to markdown, organized by section. Dispatched during Ingestion (Mode 2).
|
|
4
4
|
tools: Read, Glob, Grep, Bash, Write, WebFetch, WebSearch
|
|
5
5
|
model: inherit
|
|
6
6
|
skills:
|
|
@@ -9,8 +9,8 @@ skills:
|
|
|
9
9
|
|
|
10
10
|
# docs — the documentation dimension
|
|
11
11
|
|
|
12
|
-
You
|
|
13
|
-
`.claude/rules/
|
|
12
|
+
You collect a target's docs into `research/<target>/dimensions/docs/`. Read
|
|
13
|
+
`.claude/rules/ingestion.md` (repo root) first and obey its shape + redaction rules.
|
|
14
14
|
|
|
15
15
|
## Inputs (from the dispatch prompt)
|
|
16
16
|
- target slug; the docs entry point(s): an in-repo `docs/` path, an `llms.txt` URL, a docs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: infra-backend-fingerprint
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the INFRA-BACKEND-FINGERPRINT dimension of the Discover Harness. Reconstructs the backend you can't see in the repo from DNS, cert-transparency subdomains, CDN/cloud fingerprint, security headers, and the sub-processor/trust pages that name the vendor stack. Dispatched during Ingestion (Mode 2) — not invoked directly by users.
|
|
4
4
|
tools: Read, Write, Bash, WebFetch, WebSearch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
@@ -9,7 +9,7 @@ model: inherit
|
|
|
9
9
|
|
|
10
10
|
You reconstruct the **backend a target runs on** — the part you can't see in the repo or the
|
|
11
11
|
bundle — into `research/<target>/dimensions/infra-backend-fingerprint/`. Read
|
|
12
|
-
`.claude/rules/
|
|
12
|
+
`.claude/rules/ingestion.md` (repo root) first: it defines the `_summary.md` + `raw/` shape, the
|
|
13
13
|
provenance frontmatter evaluation weights on, the size discipline, and the ethics (§7) that bind
|
|
14
14
|
every dimension. You obey it. **Read-only public recon only** — DNS lookups, cert-transparency
|
|
15
15
|
queries, header probes, and public legal/trust pages. No login, no scanning, no state changes.
|
|
@@ -86,7 +86,7 @@ per §5):
|
|
|
86
86
|
Return a **one-paragraph headline** of the reconstructed backend — origin cloud, edge CDN, email +
|
|
87
87
|
AI + payments providers, and the most interesting CT-leaked host (`staging.`/`internal.`/`admin.`).
|
|
88
88
|
Cross-check against siblings: the CSP `connect-src` and CT-found `api.<target>` host should match the
|
|
89
|
-
**`
|
|
89
|
+
**`dimensions/_shared/api-path-catalog.md`** seam (§6) produced by `deployed-client-bundle`/`session`/`wire-capture`
|
|
90
90
|
— flag a host in your fingerprint that none of them ever hit as a dormant/internal surface, and flag
|
|
91
91
|
a vendor named in `sub-processors.md` (e.g. an AI provider) that no other dimension surfaced. Note
|
|
92
92
|
any CT-leaked host worth a `wire-capture` or `deployed-client-bundle` follow-up.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: packages
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the PUBLISHED PACKAGES dimension of the Discover Harness — npm / PyPI / crates / Maven / NuGet artifacts. Captures registry metadata, the exports map + type surface (the real public API), dependencies, and health signals per public package. Dispatched during Ingestion (Mode 2).
|
|
4
4
|
tools: Bash, Read, Glob, Grep, Write, WebFetch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# packages — the published packages dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
`.claude/rules/
|
|
10
|
+
You collect a target's installable artifacts into `research/<target>/dimensions/packages/`. Read
|
|
11
|
+
`.claude/rules/ingestion.md` (repo root) first and obey it.
|
|
12
12
|
|
|
13
13
|
## Inputs (from the dispatch prompt)
|
|
14
14
|
- target slug; the package list (names + registry); the output dir
|
|
@@ -1,28 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: session
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the LOGGED-IN APP SESSION dimension of the Discover 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
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
|
|
|
8
8
|
# session — the logged-in app session dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
the deepest, most sensitive dimension. Read `.claude/rules/
|
|
10
|
+
You collect the **authenticated runtime** into `research/<target>/dimensions/session/`. This is
|
|
11
|
+
the deepest, most sensitive dimension. Read `.claude/rules/ingestion.md` (repo root):
|
|
12
12
|
- **§7** — the ethics that bind you hardest here (credentials, redaction, state-change confirmation).
|
|
13
13
|
- **§9** — the session playbook for this one dimension: prerequisites (§9.1), the three-pass
|
|
14
14
|
strategy (§9.2), the P0→P6 phases (§9.3), runtime taps + the credential-scrub wrapper (§9.4),
|
|
15
15
|
and the capture contract (§9.5).
|
|
16
|
+
- **§7.0** — the **runnable redaction layer** (`SCRUB` / `redactSecrets` / `ULTRA`): install it
|
|
17
|
+
inside the tap wrapper so no secret reaches `raw/`.
|
|
18
|
+
|
|
19
|
+
Also read `.claude/rules/tradecraft.md` — the **keyboard-level reference** for this
|
|
20
|
+
dimension: copy-paste fetch/XHR/WebSocket/EventSource/Pusher taps (install them *first*, before
|
|
21
|
+
navigating), the ~27-entry Chrome-MCP gotcha catalogue, the dead-end recovery table, the Apollo-cache
|
|
22
|
+
read-side recipe, and the storage/auth/envelope/realtime fingerprint tables. Don't re-derive a tap
|
|
23
|
+
you can paste.
|
|
16
24
|
|
|
17
25
|
## This dimension is special
|
|
18
26
|
|
|
19
27
|
It is **interactive and gated**, unlike the other six:
|
|
20
|
-
- **Preconditions** (verify first, per `
|
|
28
|
+
- **Preconditions** (verify first, per `ingestion` §9.1): the user is pre-logged-in to the
|
|
21
29
|
target in Chrome; the Claude Chrome extension is installed; Chrome CDP is connected. If any
|
|
22
30
|
fails, return `blocked` with which precondition is missing — do not proceed.
|
|
23
31
|
- **You never enter credentials.** The user signs in beforehand.
|
|
24
32
|
- **Read-only by default (Pass 1).** Storage *shape* not values; redact every credential
|
|
25
|
-
inside the fetch wrapper so secrets never reach disk (`
|
|
33
|
+
inside the fetch wrapper so secrets never reach disk (`ingestion` §7 redaction patterns + §9.4 in-wrapper scrub).
|
|
26
34
|
- **Pass 2 (any state-changing / cost-incurring action) is NOT yours to trigger.** Return to
|
|
27
35
|
the main session with the exact proposed action + estimated cost so the *user* authorizes it
|
|
28
36
|
in chat. Browser instrumentation that changes state must go through that confirmation loop.
|
|
@@ -35,16 +43,26 @@ cost-incurring action) is NOT yours to trigger** — return to the **main sessio
|
|
|
35
43
|
action + estimated cost so the *user* authorizes it in chat (the confirmation loop above). The main
|
|
36
44
|
session still owns the user dialogue and any state-changing instrumentation.
|
|
37
45
|
|
|
38
|
-
## Output (the playbook's own contract — richer than the standard
|
|
46
|
+
## Output (the playbook's own contract — richer than the standard capture)
|
|
39
47
|
|
|
40
48
|
Under `research/<target>/dimensions/session/`:
|
|
41
49
|
- `captures/p0-surface.md`, `p1-auth.md`, and per-phase narratives (P2 core action, P3
|
|
42
|
-
streaming, P4 runtime/state, P5 iteration) — decoded, opinionated, per `
|
|
50
|
+
streaming, P4 runtime/state, P5 iteration) — decoded, opinionated, per `ingestion` §9.5.
|
|
43
51
|
- `raw/*.json` — verbatim endpoint captures with `_meta` + `_decoded_fields`, **all secrets
|
|
44
|
-
redacted** (`
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
redacted** (`ingestion` §9.5). Digest bodies >50KB. App API paths + flags you observe **append
|
|
53
|
+
to the shared `dimensions/_shared/{api-path-catalog.md, feature-flags.md}` with `source: session`**
|
|
54
|
+
(ingestion §6) — and the folded rung-1 wire tap appends there as `source: wire`.
|
|
55
|
+
- `curls.md` — reproducible commands per endpoint, auth model documented (`ingestion` §9.5).
|
|
56
|
+
- **Visual / surface map** — `captures/screens/` is preferred *when screenshots are available*; when
|
|
57
|
+
they are **not** (no image tool, or the app holds a persistent connection that never reaches
|
|
58
|
+
page-idle), a textual `captures/surface-map.md` is the **accepted substitute** that satisfies the
|
|
59
|
+
§9.5 visual-map requirement — and you record the visual-coverage gap in the `_summary.md` `gaps:`
|
|
60
|
+
frontmatter (a known constraint, not a silent miss).
|
|
61
|
+
- `_summary.md` — a short bridge file in the standard capture shape pointing into the above, so
|
|
62
|
+
the synthesis step can treat session like any other dimension. Its frontmatter additionally carries
|
|
63
|
+
**`write_side_observed: <true|false>`** and **`pass2: <not-applicable | offered-pending |
|
|
64
|
+
declined-by-user | deferred | done>`** (§9.2) so Evaluation renders the write-side gap once,
|
|
65
|
+
machine-readably; a deferred Pass 2 may add an optional `captures/pass2-followup.md`.
|
|
48
66
|
|
|
49
67
|
## Return value
|
|
50
68
|
A one-paragraph headline (the auth model + transport + the single most load-bearing wire
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: website
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the MARKETING WEBSITE dimension of the Discover 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
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:
|
|
@@ -9,8 +9,8 @@ skills:
|
|
|
9
9
|
|
|
10
10
|
# website — the marketing website dimension
|
|
11
11
|
|
|
12
|
-
You
|
|
13
|
-
`.claude/rules/
|
|
12
|
+
You collect a target's public-facing site into `research/<target>/dimensions/website/`. Read
|
|
13
|
+
`.claude/rules/ingestion.md` (repo root) first and obey it. Keep marketing pages distinct
|
|
14
14
|
from docs (docs are the `docs` dimension).
|
|
15
15
|
|
|
16
16
|
## Inputs (from the dispatch prompt)
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wire-capture
|
|
3
|
-
description: Dimension
|
|
3
|
+
description: Dimension collector for the GATED WIRE-CAPTURE dimension of the Discover 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
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
|
|
|
8
8
|
# wire-capture — the gated runtime wire dimension
|
|
9
9
|
|
|
10
|
-
You
|
|
11
|
-
`research/<target>/dimensions/wire-capture/`. Read `.claude/rules/
|
|
12
|
-
first — especially **§7.1** (the 3-rung ladder),
|
|
13
|
-
redaction rules. You obey it absolutely. This is the
|
|
14
|
-
`distribution-artifacts`: the binary says what hosts it *might* call; you
|
|
10
|
+
You collect what a target's client **actually puts on the wire** into
|
|
11
|
+
`research/<target>/dimensions/wire-capture/`. Read `.claude/rules/ingestion.md` (repo root)
|
|
12
|
+
first — especially **§7.1** (the 3-rung ladder), **§7.0** (the runnable redaction layer), §6 (the
|
|
13
|
+
shared api-path-catalog seam), and the redaction rules. You obey it absolutely. This is the
|
|
14
|
+
**runtime complement** to `distribution-artifacts`: the binary says what hosts it *might* call; you
|
|
15
|
+
record what it *does*. For the rung-1 browser tap, paste the interceptors + scrubbers from
|
|
16
|
+
`.claude/rules/tradecraft.md` (the keyboard-level reference) rather than re-deriving them.
|
|
15
17
|
|
|
16
18
|
This dimension is **GATED at rungs 2–3**. You now hold read-only Chrome tools, so **rung 1 — the
|
|
17
19
|
public, unauth browser tap — you run directly**: open the public surface in a tab and tap it with
|
|
@@ -67,14 +69,16 @@ frontmatter** (`dimension: wire-capture`, `target`, `status`, `access_grade_used
|
|
|
67
69
|
**Inferences** (mark inference vs. fact — e.g. a host implies a vendor), **Open questions**,
|
|
68
70
|
**Artifacts**.
|
|
69
71
|
|
|
70
|
-
Then the captures + raw artifacts (per `
|
|
72
|
+
Then the captures + raw artifacts (per `discovery` Part C (wire-capture)):
|
|
71
73
|
- `captures/wire-narrative.md` — the decoded story: what the client does on the wire, in order.
|
|
72
74
|
- `raw/flows.json` — verbatim-but-**redacted and digested** flows, each with the `_meta` header
|
|
73
75
|
(incl. `kind`, `byte_length`, `redactions[]`, and the **chosen rung + authorization**), `body`,
|
|
74
76
|
`_decoded`. Digest large captures (schema + one redacted sample + counts), never paste megabytes.
|
|
75
|
-
- `
|
|
76
|
-
`source: wire
|
|
77
|
-
`session` rows.
|
|
77
|
+
- `dimensions/_shared/api-path-catalog.md` — the **shared-surface artifact** (§6, one physical file):
|
|
78
|
+
**append** rows carrying `source: wire` to it (never a private copy), so evaluation can run its
|
|
79
|
+
adaptive diff against `bundle`/`session`/`distribution` rows. When `wire-capture` is folded into
|
|
80
|
+
`session` (the common path — §7.1), `session` owns this append; a standalone `wire-capture` appends
|
|
81
|
+
directly.
|
|
78
82
|
- `curls.md` — reproducer `curl` skeletons with all credentials replaced by placeholders.
|
|
79
83
|
|
|
80
84
|
## Return value
|