@shadowclone/cli 0.0.3 → 0.0.5

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/README.md CHANGED
@@ -60,6 +60,11 @@ Grant consent for desired transcript sources:
60
60
  shadowclone init
61
61
  ```
62
62
 
63
+ Every source is off until it is enabled here, and two of them read files that are not transcripts:
64
+
65
+ - **`git-metadata`** reads the git remote origin of a working directory, so rules can be scoped to the organization they were learned from. Without it every directory is treated as its own isolated origin.
66
+ - **`agent-context`** reads the user's own `CLAUDE.md` or `AGENTS.md`, their skill markdown, and their agent memory directory. It exists so a transfer evaluation can freeze the same setup for both arms, and it is read only by `shadowclone eval`. Contents pass through redaction before they are written into a snapshot.
67
+
63
68
  Index your historical sessions and build your profile:
64
69
 
65
70
  ```bash
@@ -86,25 +91,25 @@ shadowclone install
86
91
 
87
92
  This writes `.claude/agents/shadowclone.md` and excludes it from git tracking.
88
93
 
89
- ## Replay evaluation
94
+ ## Transfer evaluation
90
95
 
91
- Shadowclone provides a reproducible fitness function to measure profile impact:
96
+ Shadowclone measures whether the profile changes behavior, against tasks the user actually asked for:
92
97
 
93
98
  ```bash
94
- shadowclone eval --sessions 5 --max-budget-usd 0.50
99
+ shadowclone eval --tasks 5 --engine codex
95
100
  ```
96
101
 
97
- The evaluator replays historical user prompts through two isolated runs:
98
- 1. **Baseline run:** unprofiled agent invocation without system prompt customization.
99
- 2. **Clone run:** agent invocation with the compiled project profile injected.
102
+ The evaluator selects historical requests that name an identifiable starting commit, rebuilds each one as an isolated git snapshot at that commit, and runs the task twice:
103
+ 1. **Baseline run:** the agent with frozen instructions and no profile.
104
+ 2. **Clone run:** the same agent with the profile learned from sessions strictly earlier than the task.
105
+
106
+ Arm order alternates between repetitions, and the profile is learned only from evidence that predates the task and shares no session with it.
107
+
108
+ Each run is graded two ways. The repository's own `test` and `typecheck` scripts run inside a `sandbox-exec` or `bubblewrap` boundary with no network. A blind judge then grades the observed files and actions twice with the requirement order reversed, and any disagreement between the two passes is recorded as uncertain rather than resolved.
100
109
 
101
- Replays are compared against historical developer actions across four dimensions:
102
- - **Tools:** Jaccard similarity of invoked tools.
103
- - **Verification:** Jaccard similarity of two-token bash verification commands (e.g. `bun test`, `cargo check`).
104
- - **Files:** Jaccard similarity of posix repository-relative edited paths.
105
- - **Planning:** Match on whether planning tools were invoked before the first file edit.
110
+ The command previews how many agent invocations it may spend and asks before starting. Pass `--yes` to skip the prompt, or `--json` for machine-readable output.
106
111
 
107
- Evaluation receipts are written to `~/.shadowclone/eval/<evalId>.json`.
112
+ Receipts are written to `~/.shadowclone/eval/<evalId>/receipt.json` after every run, so `--eval-id <id>` resumes an interrupted evaluation against the same frozen tasks.
108
113
 
109
114
  ## Unattended dispatch
110
115
 
@@ -133,7 +138,7 @@ The SQLite index stores file offsets, timestamps, and event kinds. Raw transcrip
133
138
  Distillation excerpts pass through a deterministic sliced replacer before reaching any model. Secrets keep identifying prefixes (such as `AKIA` or `sk_live_`) while stripping high-entropy characters, keeping code context intact without leaking credentials.
134
139
 
135
140
  **Shannon entropy layer.**
136
- Unstructured tokens exceeding 4.5 bits of entropy per character are scrubbed even if they do not match known vendor regex patterns.
141
+ Tokens of 24 characters or more that reach 4.5 bits of entropy per character are sliced under the `shannon-entropy` label, even when they match no known vendor pattern. Long identifiers, file paths, and UUIDs measure below that threshold and stay readable.
137
142
 
138
143
  **Third-party tool results are excluded.**
139
144
  Distillation inputs allowlist user prompts and developer steering corrections. Tool outputs from database queries, log dumps, and file reads are excluded by category rather than relying on regex filtering.