transcripto 0.1.0__py3-none-any.whl
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.
- transcripto-0.1.0.dist-info/METADATA +229 -0
- transcripto-0.1.0.dist-info/RECORD +7 -0
- transcripto-0.1.0.dist-info/WHEEL +5 -0
- transcripto-0.1.0.dist-info/entry_points.txt +2 -0
- transcripto-0.1.0.dist-info/licenses/LICENSE +21 -0
- transcripto-0.1.0.dist-info/top_level.txt +1 -0
- transcripto.py +1378 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: transcripto
|
|
3
|
+
Version: 0.1.0
|
|
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
|
+
Author: Oscar Morke
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Morkeeth/transcripto
|
|
8
|
+
Project-URL: Source, https://github.com/Morkeeth/transcripto
|
|
9
|
+
Keywords: claude-code,coding-agents,transcripts,local-first,analytics
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Topic :: Utilities
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Dynamic: license-file
|
|
18
|
+
|
|
19
|
+
# transcripto
|
|
20
|
+
|
|
21
|
+
**your coding agents keep a transcript of every session. it is the most valuable
|
|
22
|
+
dataset you own, and you cannot scroll back far enough to read it. transcripto
|
|
23
|
+
indexes it, keeps only the turns you actually typed, and grades them.**
|
|
24
|
+
|
|
25
|
+
one command, no account, no signup, no cloud. it reads files that are already on
|
|
26
|
+
your disk and never opens a socket.
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
uvx transcripto coach
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## what you get back
|
|
33
|
+
|
|
34
|
+
this is a real run on one machine, pasted unedited:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
YOUR PROMPT HABITS, GRADED (offline, your machine only)
|
|
38
|
+
|
|
39
|
+
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
|
|
44
|
+
|
|
45
|
+
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
|
+
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
|
|
51
|
+
58% (21/36) no-object (pronoun/vague)
|
|
52
|
+
58% (98/170) cites-a-file-or-path
|
|
53
|
+
|
|
54
|
+
SURVIVES LEAST these tend to loop:
|
|
55
|
+
33% (4/12) intent:REVERT
|
|
56
|
+
39% (403/1030) intent:none
|
|
57
|
+
40% (4/10) intent:TEST
|
|
58
|
+
41% (293/709) terse (<8 words)
|
|
59
|
+
44% (75/169) intent:DESCRIBE
|
|
60
|
+
|
|
61
|
+
+ your best landed prompt, with its witness:
|
|
62
|
+
"mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
|
|
63
|
+
COMMIT-WITNESSED: git commit · corrections: 0
|
|
64
|
+
|
|
65
|
+
- your worst looped prompt, with its witness:
|
|
66
|
+
"ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
|
|
67
|
+
NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
|
|
68
|
+
```
|
|
69
|
+
|
|
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.
|
|
73
|
+
|
|
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.
|
|
77
|
+
|
|
78
|
+
## the proxy caveat, which travels with every number
|
|
79
|
+
|
|
80
|
+
an episode "survived" if a Write or Edit landed, or a git commit ran and nothing
|
|
81
|
+
reverted it inside the same transcript.
|
|
82
|
+
|
|
83
|
+
that is a durable **keystroke**, not a durable **outcome**. a commit is not proof
|
|
84
|
+
the code was right. a revert in a later session is invisible to it. a prompt
|
|
85
|
+
whose payoff was a decision rather than an edit reads as dead. it is a coaching
|
|
86
|
+
signal, not a verdict. if it ever prints something that flatters you, distrust it.
|
|
87
|
+
|
|
88
|
+
the caveat is printed in the output itself, every run, on purpose.
|
|
89
|
+
|
|
90
|
+
## why your own gate matters here
|
|
91
|
+
|
|
92
|
+
at fleet scale roughly 95% of the `type: user` records in a transcript are not
|
|
93
|
+
you. they are tool results, injected skill bodies, sub-agent prompts, and
|
|
94
|
+
messages from other terminals, all wearing your role. transcripto gates on
|
|
95
|
+
`promptSource` (typed/queued, no meta, no sidechain) so it grades what you typed.
|
|
96
|
+
|
|
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
|
+
|
|
100
|
+
the same gate is what makes `cost` produce a number a spend tracker cannot:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
cost per human decision last 30 days 2026-07-28 → 2026-08-27
|
|
104
|
+
|
|
105
|
+
API-equivalent spend $8,892.49
|
|
106
|
+
your decisions 2934 turns you actually typed (promptSource typed/queued)
|
|
107
|
+
────────────────────────────────────────────────────
|
|
108
|
+
cost per human decision $3.03
|
|
109
|
+
|
|
110
|
+
46.4k agent messages · 16 per decision · 11.5B tokens · 149 sessions
|
|
111
|
+
57.7k raw `type: user` records in the same window. dividing by those instead
|
|
112
|
+
would read $0.15, 19.7x too cheap.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
it prints both, so the gate's effect is something you can check rather than
|
|
116
|
+
something i am asserting. these are API-equivalent dollars at list rates,
|
|
117
|
+
because a transcript has no cost field, only token counts. on a subscription you
|
|
118
|
+
did not pay this.
|
|
119
|
+
|
|
120
|
+
## honest limits
|
|
121
|
+
|
|
122
|
+
read these before you quote a number at anyone.
|
|
123
|
+
|
|
124
|
+
- **survival is a proxy**, described above. durable keystroke, not durable outcome.
|
|
125
|
+
- **one operator's corpus.** every figure in this README comes from one machine.
|
|
126
|
+
it is an existence proof that the measurement runs, not a finding about how
|
|
127
|
+
people prompt. run it on yours and you get yours.
|
|
128
|
+
- **two harnesses today: Claude Code and Codex.** nothing else is supported.
|
|
129
|
+
cursor, aider, and the rest are not read.
|
|
130
|
+
- **the habit labels are heuristics.** "states-a-check-or-done-condition" is a
|
|
131
|
+
pattern match over your text, not comprehension. it will misfile some prompts.
|
|
132
|
+
- **correlation, not instruction.** detailed prompts surviving more often does not
|
|
133
|
+
prove that padding a prompt causes survival.
|
|
134
|
+
|
|
135
|
+
## privacy
|
|
136
|
+
|
|
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.
|
|
141
|
+
|
|
142
|
+
your transcripts stay in `~/.claude` and `~/.codex`. the index it builds stays in
|
|
143
|
+
`~/.trace`.
|
|
144
|
+
|
|
145
|
+
## the rest of it
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
transcripto index build / refresh (incremental)
|
|
149
|
+
transcripto watch live, new sessions get picked up as your agents work
|
|
150
|
+
transcripto ask YOUR OWN messages about a topic, newest first + a rollup
|
|
151
|
+
transcripto search full-text across everything (you + agents + tool logs)
|
|
152
|
+
transcripto find every session that wrote / edited / read a file
|
|
153
|
+
transcripto sessions recent sessions + their opening ask
|
|
154
|
+
transcripto stats what you actually work on
|
|
155
|
+
transcripto cost what ONE of your decisions costs
|
|
156
|
+
transcripto coach which of YOUR prompt habits survive (a proxy)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`ask` is the one that kills "wait, did i lose something?". it answers "what was i
|
|
160
|
+
thinking about X across ALL my sessions", in your own words only.
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
$ transcripto find USER-JOURNEY.md
|
|
164
|
+
2026-08-20 WROTE ~/CODE/mountain-of-helicon-main/USER-JOURNEY.md
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
the file you lost, found across every session you ever ran, one line.
|
|
168
|
+
|
|
169
|
+
## Codex
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
transcripto coach --harness codex
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
reads `~/.codex` (sessions + archived_sessions), normalises it into the same rows,
|
|
176
|
+
and applies the identical survival proxy. it also ingests `history.jsonl` purely
|
|
177
|
+
as a control on the gate: it reports how many of its input lines also show up as
|
|
178
|
+
typed rollout turns, so you can see the gate agreeing with a second source.
|
|
179
|
+
|
|
180
|
+
## install
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
uvx transcripto coach
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
no install, nothing to set up. or put it on your PATH:
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
pipx install transcripto
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
or run the single file with no packaging at all:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
git clone https://github.com/Morkeeth/transcripto
|
|
196
|
+
cd transcripto
|
|
197
|
+
python3 transcripto.py coach
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
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.
|
|
203
|
+
|
|
204
|
+
## tests
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
./test_coach.sh 14 assertions
|
|
208
|
+
./test_codex.sh 14 assertions
|
|
209
|
+
./test_cost.sh 12 assertions
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
offline, no keys, on fixtures that inherit the real transcript shape including
|
|
213
|
+
all four ways a non-human record disguises itself as `type: user`.
|
|
214
|
+
|
|
215
|
+
the load-bearing one in `test_coach.sh` is `REVERTED IS NOT SURVIVED`: a commit
|
|
216
|
+
that got `reset --hard` in the same session left no durable record. flip that one
|
|
217
|
+
line and the suite goes red, which is the point. a generous proxy is a broken one.
|
|
218
|
+
|
|
219
|
+
## why though
|
|
220
|
+
|
|
221
|
+
your agent history is proof. every "yeah it's done" has a real trace sitting
|
|
222
|
+
behind it. transcripto is the index that makes it checkable.
|
|
223
|
+
|
|
224
|
+
it is the fuel layer. on top of it you check what your agents *claim* against what
|
|
225
|
+
the trace *shows*, which is [mountain of helicon](https://github.com/Morkeeth/mountain-of-helicon).
|
|
226
|
+
the pitch was never "search your history". it is *prove your agent did what it
|
|
227
|
+
said, from your own local traces.*
|
|
228
|
+
|
|
229
|
+
local, MIT, no telemetry. star it if it finds you something you'd lost ™
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
transcripto.py,sha256=gITFpzqFWGu6JhxX9Wamh6hIfCKbwijlGe3CoEDz44g,63747
|
|
2
|
+
transcripto-0.1.0.dist-info/licenses/LICENSE,sha256=sNIV-_XXsBt96tiCGvGjrYcs8-Pf2gt0rD2nMG8RBg0,1068
|
|
3
|
+
transcripto-0.1.0.dist-info/METADATA,sha256=66pS-LMY3s4TCTbSxQy5l1tYhAD84-XS1pZmoNEb7IQ,8954
|
|
4
|
+
transcripto-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
5
|
+
transcripto-0.1.0.dist-info/entry_points.txt,sha256=n08_q2ciXNUidMox8xlmCq3slv1aS4NGxGSCIJOYKOI,49
|
|
6
|
+
transcripto-0.1.0.dist-info/top_level.txt,sha256=9WcZWehnabAXzqsCQdshLVAn9n6-8ttFf3_fzrbsAC4,12
|
|
7
|
+
transcripto-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Oscar Morke
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
transcripto
|