transcripto 0.1.0__tar.gz → 0.1.1__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: transcripto
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Search everything your coding agents ever did, grade your own prompts, and price your decisions. Local, stdlib-only, your data never leaves the machine.
5
5
  Author: Oscar Morke
6
6
  License: MIT
@@ -31,32 +31,33 @@ uvx transcripto coach
31
31
 
32
32
  ## what you get back
33
33
 
34
- this is a real run on one machine, pasted unedited:
34
+ this is a real run on one machine, pasted unedited, 2026-08-28:
35
35
 
36
36
  ```
37
+
37
38
  YOUR PROMPT HABITS, GRADED (offline, your machine only)
38
39
 
39
40
  harness: claude
40
- corpus : 2713 transcript(s), 366,664 records
41
- kept : 3605 prompts you actually typed (0.98% of records)
42
- ranked : 1911 episodes, 890 survived (47%)
43
- tiers : commit 356 | write/edit 534 | reverted 2 | nothing durable 1019
41
+ corpus : 2720 transcript(s), 381,804 records
42
+ kept : 3678 prompts you actually typed (0.96% of records)
43
+ episodes: 1946 ranked, 910 survived (47%)
44
+ tiers : commit 373 | write/edit 537 | reverted 2 | nothing durable 1034
44
45
 
45
46
  SURVIVAL IS A PROXY: survival = a durable Write/Edit or an un-reverted git commit in-episode. A PROXY, not proof the work was correct or shipped.
46
47
 
47
48
  SURVIVES MOST do more of these:
48
- 65% (164/253) detailed (>40 words)
49
- 64% (66/103) states-a-check-or-done-condition
50
- 59% (404/690) intent:CHANGE
49
+ 64% (167/260) detailed (>40 words)
50
+ 63% (66/104) states-a-check-or-done-condition
51
+ 58% (414/708) intent:CHANGE
51
52
  58% (21/36) no-object (pronoun/vague)
52
- 58% (98/170) cites-a-file-or-path
53
+ 57% (99/175) cites-a-file-or-path
53
54
 
54
55
  SURVIVES LEAST these tend to loop:
55
56
  33% (4/12) intent:REVERT
56
- 39% (403/1030) intent:none
57
+ 39% (411/1043) intent:none
57
58
  40% (4/10) intent:TEST
58
- 41% (293/709) terse (<8 words)
59
- 44% (75/169) intent:DESCRIBE
59
+ 42% (298/715) terse (<8 words)
60
+ 45% (77/173) intent:DESCRIBE
60
61
 
61
62
  + your best landed prompt, with its witness:
62
63
  "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
@@ -67,13 +68,14 @@ this is a real run on one machine, pasted unedited:
67
68
  NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
68
69
  ```
69
70
 
70
- those are my numbers. yours will be different, which is the whole point. the last
71
- two lines are the ones that sting: it hands you back your own best and worst
72
- prompt, verbatim, with the receipt for why it scored each one.
71
+ those are my numbers on that date, and they move every session i run, so treat
72
+ them as a snapshot rather than a constant. yours will be different, which is the
73
+ whole point. the last two lines are the ones that sting: it hands you back your
74
+ own best and worst prompt, verbatim, with the receipt for why it scored each one.
73
75
 
74
- on that machine, prompts that wrote down what done looks like survived **64% of
75
- the time (66 of 103)**. prompts with no stated intent survived **39% (403 of
76
- 1030)**. i had spent a year blaming the model.
76
+ on that machine, prompts that wrote down what done looks like survived **63% of
77
+ the time (66 of 104)**. prompts with no stated intent survived **39% (411 of
78
+ 1043)**. i had spent a year blaming the model.
77
79
 
78
80
  ## the proxy caveat, which travels with every number
79
81
 
@@ -94,8 +96,8 @@ you. they are tool results, injected skill bodies, sub-agent prompts, and
94
96
  messages from other terminals, all wearing your role. transcripto gates on
95
97
  `promptSource` (typed/queued, no meta, no sidechain) so it grades what you typed.
96
98
 
97
- you can watch the gate do work: in the run above, 3605 of 366,664 records
98
- survived it. that is 0.98%.
99
+ you can watch the gate do work: in the run above, 3678 of 381,804 records
100
+ survived it. that is 0.96%.
99
101
 
100
102
  the same gate is what makes `cost` produce a number a spend tracker cannot:
101
103
 
@@ -134,10 +136,20 @@ read these before you quote a number at anyone.
134
136
 
135
137
  ## privacy
136
138
 
137
- it runs locally and never touches the network. the entire import list is
138
- `sys, os, json, glob, re, sqlite3, argparse, datetime`. there is no socket, no
139
- urllib, no requests, no subprocess, no telemetry, no analytics, and no account.
140
- you can check that in one grep of the single file it ships as.
139
+ it runs locally and never touches the network. there is no socket, no urllib, no
140
+ requests, no subprocess, no telemetry, no analytics, and no account. that is a
141
+ claim, so here is the grep that settles it against the single file it ships as:
142
+
143
+ ```
144
+ $ grep -nE '^[[:space:]]*(import|from) ' transcripto.py
145
+ 8:import sys, os, json, glob, re, sqlite3, argparse
146
+ 9:from datetime import datetime, timezone
147
+ 225: import time
148
+ ```
149
+
150
+ that is the whole import list, three lines. `time` sits inside the `watch` loop,
151
+ which is why the pattern allows for indentation. anchor it at `^import` and you
152
+ would miss one, so do not take my word for the anchor either.
141
153
 
142
154
  your transcripts stay in `~/.claude` and `~/.codex`. the index it builds stays in
143
155
  `~/.trace`.
@@ -198,8 +210,7 @@ python3 transcripto.py coach
198
210
  ```
199
211
 
200
212
  no dependencies, stdlib only, one file. the packaging adds nothing at runtime, it
201
- just gives the file a name on your PATH. `trace` is a second name for the same
202
- command.
213
+ just gives the file a name on your PATH.
203
214
 
204
215
  ## tests
205
216
 
@@ -13,32 +13,33 @@ uvx transcripto coach
13
13
 
14
14
  ## what you get back
15
15
 
16
- this is a real run on one machine, pasted unedited:
16
+ this is a real run on one machine, pasted unedited, 2026-08-28:
17
17
 
18
18
  ```
19
+
19
20
  YOUR PROMPT HABITS, GRADED (offline, your machine only)
20
21
 
21
22
  harness: claude
22
- corpus : 2713 transcript(s), 366,664 records
23
- kept : 3605 prompts you actually typed (0.98% of records)
24
- ranked : 1911 episodes, 890 survived (47%)
25
- tiers : commit 356 | write/edit 534 | reverted 2 | nothing durable 1019
23
+ corpus : 2720 transcript(s), 381,804 records
24
+ kept : 3678 prompts you actually typed (0.96% of records)
25
+ episodes: 1946 ranked, 910 survived (47%)
26
+ tiers : commit 373 | write/edit 537 | reverted 2 | nothing durable 1034
26
27
 
27
28
  SURVIVAL IS A PROXY: survival = a durable Write/Edit or an un-reverted git commit in-episode. A PROXY, not proof the work was correct or shipped.
28
29
 
29
30
  SURVIVES MOST do more of these:
30
- 65% (164/253) detailed (>40 words)
31
- 64% (66/103) states-a-check-or-done-condition
32
- 59% (404/690) intent:CHANGE
31
+ 64% (167/260) detailed (>40 words)
32
+ 63% (66/104) states-a-check-or-done-condition
33
+ 58% (414/708) intent:CHANGE
33
34
  58% (21/36) no-object (pronoun/vague)
34
- 58% (98/170) cites-a-file-or-path
35
+ 57% (99/175) cites-a-file-or-path
35
36
 
36
37
  SURVIVES LEAST these tend to loop:
37
38
  33% (4/12) intent:REVERT
38
- 39% (403/1030) intent:none
39
+ 39% (411/1043) intent:none
39
40
  40% (4/10) intent:TEST
40
- 41% (293/709) terse (<8 words)
41
- 44% (75/169) intent:DESCRIBE
41
+ 42% (298/715) terse (<8 words)
42
+ 45% (77/173) intent:DESCRIBE
42
43
 
43
44
  + your best landed prompt, with its witness:
44
45
  "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
@@ -49,13 +50,14 @@ this is a real run on one machine, pasted unedited:
49
50
  NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
50
51
  ```
51
52
 
52
- those are my numbers. yours will be different, which is the whole point. the last
53
- two lines are the ones that sting: it hands you back your own best and worst
54
- prompt, verbatim, with the receipt for why it scored each one.
53
+ those are my numbers on that date, and they move every session i run, so treat
54
+ them as a snapshot rather than a constant. yours will be different, which is the
55
+ whole point. the last two lines are the ones that sting: it hands you back your
56
+ own best and worst prompt, verbatim, with the receipt for why it scored each one.
55
57
 
56
- on that machine, prompts that wrote down what done looks like survived **64% of
57
- the time (66 of 103)**. prompts with no stated intent survived **39% (403 of
58
- 1030)**. i had spent a year blaming the model.
58
+ on that machine, prompts that wrote down what done looks like survived **63% of
59
+ the time (66 of 104)**. prompts with no stated intent survived **39% (411 of
60
+ 1043)**. i had spent a year blaming the model.
59
61
 
60
62
  ## the proxy caveat, which travels with every number
61
63
 
@@ -76,8 +78,8 @@ you. they are tool results, injected skill bodies, sub-agent prompts, and
76
78
  messages from other terminals, all wearing your role. transcripto gates on
77
79
  `promptSource` (typed/queued, no meta, no sidechain) so it grades what you typed.
78
80
 
79
- you can watch the gate do work: in the run above, 3605 of 366,664 records
80
- survived it. that is 0.98%.
81
+ you can watch the gate do work: in the run above, 3678 of 381,804 records
82
+ survived it. that is 0.96%.
81
83
 
82
84
  the same gate is what makes `cost` produce a number a spend tracker cannot:
83
85
 
@@ -116,10 +118,20 @@ read these before you quote a number at anyone.
116
118
 
117
119
  ## privacy
118
120
 
119
- it runs locally and never touches the network. the entire import list is
120
- `sys, os, json, glob, re, sqlite3, argparse, datetime`. there is no socket, no
121
- urllib, no requests, no subprocess, no telemetry, no analytics, and no account.
122
- you can check that in one grep of the single file it ships as.
121
+ it runs locally and never touches the network. there is no socket, no urllib, no
122
+ requests, no subprocess, no telemetry, no analytics, and no account. that is a
123
+ claim, so here is the grep that settles it against the single file it ships as:
124
+
125
+ ```
126
+ $ grep -nE '^[[:space:]]*(import|from) ' transcripto.py
127
+ 8:import sys, os, json, glob, re, sqlite3, argparse
128
+ 9:from datetime import datetime, timezone
129
+ 225: import time
130
+ ```
131
+
132
+ that is the whole import list, three lines. `time` sits inside the `watch` loop,
133
+ which is why the pattern allows for indentation. anchor it at `^import` and you
134
+ would miss one, so do not take my word for the anchor either.
123
135
 
124
136
  your transcripts stay in `~/.claude` and `~/.codex`. the index it builds stays in
125
137
  `~/.trace`.
@@ -180,8 +192,7 @@ python3 transcripto.py coach
180
192
  ```
181
193
 
182
194
  no dependencies, stdlib only, one file. the packaging adds nothing at runtime, it
183
- just gives the file a name on your PATH. `trace` is a second name for the same
184
- command.
195
+ just gives the file a name on your PATH.
185
196
 
186
197
  ## tests
187
198
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "transcripto"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "Search everything your coding agents ever did, grade your own prompts, and price your decisions. Local, stdlib-only, your data never leaves the machine."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: transcripto
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Search everything your coding agents ever did, grade your own prompts, and price your decisions. Local, stdlib-only, your data never leaves the machine.
5
5
  Author: Oscar Morke
6
6
  License: MIT
@@ -31,32 +31,33 @@ uvx transcripto coach
31
31
 
32
32
  ## what you get back
33
33
 
34
- this is a real run on one machine, pasted unedited:
34
+ this is a real run on one machine, pasted unedited, 2026-08-28:
35
35
 
36
36
  ```
37
+
37
38
  YOUR PROMPT HABITS, GRADED (offline, your machine only)
38
39
 
39
40
  harness: claude
40
- corpus : 2713 transcript(s), 366,664 records
41
- kept : 3605 prompts you actually typed (0.98% of records)
42
- ranked : 1911 episodes, 890 survived (47%)
43
- tiers : commit 356 | write/edit 534 | reverted 2 | nothing durable 1019
41
+ corpus : 2720 transcript(s), 381,804 records
42
+ kept : 3678 prompts you actually typed (0.96% of records)
43
+ episodes: 1946 ranked, 910 survived (47%)
44
+ tiers : commit 373 | write/edit 537 | reverted 2 | nothing durable 1034
44
45
 
45
46
  SURVIVAL IS A PROXY: survival = a durable Write/Edit or an un-reverted git commit in-episode. A PROXY, not proof the work was correct or shipped.
46
47
 
47
48
  SURVIVES MOST do more of these:
48
- 65% (164/253) detailed (>40 words)
49
- 64% (66/103) states-a-check-or-done-condition
50
- 59% (404/690) intent:CHANGE
49
+ 64% (167/260) detailed (>40 words)
50
+ 63% (66/104) states-a-check-or-done-condition
51
+ 58% (414/708) intent:CHANGE
51
52
  58% (21/36) no-object (pronoun/vague)
52
- 58% (98/170) cites-a-file-or-path
53
+ 57% (99/175) cites-a-file-or-path
53
54
 
54
55
  SURVIVES LEAST these tend to loop:
55
56
  33% (4/12) intent:REVERT
56
- 39% (403/1030) intent:none
57
+ 39% (411/1043) intent:none
57
58
  40% (4/10) intent:TEST
58
- 41% (293/709) terse (<8 words)
59
- 44% (75/169) intent:DESCRIBE
59
+ 42% (298/715) terse (<8 words)
60
+ 45% (77/173) intent:DESCRIBE
60
61
 
61
62
  + your best landed prompt, with its witness:
62
63
  "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
@@ -67,13 +68,14 @@ this is a real run on one machine, pasted unedited:
67
68
  NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
68
69
  ```
69
70
 
70
- those are my numbers. yours will be different, which is the whole point. the last
71
- two lines are the ones that sting: it hands you back your own best and worst
72
- prompt, verbatim, with the receipt for why it scored each one.
71
+ those are my numbers on that date, and they move every session i run, so treat
72
+ them as a snapshot rather than a constant. yours will be different, which is the
73
+ whole point. the last two lines are the ones that sting: it hands you back your
74
+ own best and worst prompt, verbatim, with the receipt for why it scored each one.
73
75
 
74
- on that machine, prompts that wrote down what done looks like survived **64% of
75
- the time (66 of 103)**. prompts with no stated intent survived **39% (403 of
76
- 1030)**. i had spent a year blaming the model.
76
+ on that machine, prompts that wrote down what done looks like survived **63% of
77
+ the time (66 of 104)**. prompts with no stated intent survived **39% (411 of
78
+ 1043)**. i had spent a year blaming the model.
77
79
 
78
80
  ## the proxy caveat, which travels with every number
79
81
 
@@ -94,8 +96,8 @@ you. they are tool results, injected skill bodies, sub-agent prompts, and
94
96
  messages from other terminals, all wearing your role. transcripto gates on
95
97
  `promptSource` (typed/queued, no meta, no sidechain) so it grades what you typed.
96
98
 
97
- you can watch the gate do work: in the run above, 3605 of 366,664 records
98
- survived it. that is 0.98%.
99
+ you can watch the gate do work: in the run above, 3678 of 381,804 records
100
+ survived it. that is 0.96%.
99
101
 
100
102
  the same gate is what makes `cost` produce a number a spend tracker cannot:
101
103
 
@@ -134,10 +136,20 @@ read these before you quote a number at anyone.
134
136
 
135
137
  ## privacy
136
138
 
137
- it runs locally and never touches the network. the entire import list is
138
- `sys, os, json, glob, re, sqlite3, argparse, datetime`. there is no socket, no
139
- urllib, no requests, no subprocess, no telemetry, no analytics, and no account.
140
- you can check that in one grep of the single file it ships as.
139
+ it runs locally and never touches the network. there is no socket, no urllib, no
140
+ requests, no subprocess, no telemetry, no analytics, and no account. that is a
141
+ claim, so here is the grep that settles it against the single file it ships as:
142
+
143
+ ```
144
+ $ grep -nE '^[[:space:]]*(import|from) ' transcripto.py
145
+ 8:import sys, os, json, glob, re, sqlite3, argparse
146
+ 9:from datetime import datetime, timezone
147
+ 225: import time
148
+ ```
149
+
150
+ that is the whole import list, three lines. `time` sits inside the `watch` loop,
151
+ which is why the pattern allows for indentation. anchor it at `^import` and you
152
+ would miss one, so do not take my word for the anchor either.
141
153
 
142
154
  your transcripts stay in `~/.claude` and `~/.codex`. the index it builds stays in
143
155
  `~/.trace`.
@@ -198,8 +210,7 @@ python3 transcripto.py coach
198
210
  ```
199
211
 
200
212
  no dependencies, stdlib only, one file. the packaging adds nothing at runtime, it
201
- just gives the file a name on your PATH. `trace` is a second name for the same
202
- command.
213
+ just gives the file a name on your PATH.
203
214
 
204
215
  ## tests
205
216
 
File without changes
File without changes
File without changes