prompt-profile 0.1.4 → 0.2.0
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 +183 -241
- package/dist/bin.js +13933 -6278
- package/dist/prompts/map.md +137 -2
- package/dist/prompts/merge.md +18 -0
- package/dist/prompts/reduce.md +269 -7
- package/dist/prompts/review.md +106 -0
- package/dist/prompts/translate.md +34 -4
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -1,288 +1,230 @@
|
|
|
1
1
|
# prompt-profile
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
real prompts, suggested rewrites, project names, exact dates and fun facts.
|
|
17
|
-
- [Shareable report](https://erictsai83.github.io/prompt-profile/demo/without-personal/report.html): the same profile rendered with
|
|
18
|
-
`--exclude personal`: no quotes, rewrites or fun facts, projects shown as "Project A, B…",
|
|
19
|
-
dates by month. This is what you would post publicly.
|
|
20
|
-
|
|
21
|
-
The share card is the same for both: it never contains quotes or project names. The full report
|
|
22
|
-
in every look (`--look`; render only, no new analysis):
|
|
23
|
-
|
|
24
|
-
<table>
|
|
25
|
-
<tr>
|
|
26
|
-
<td width="50%" align="center">
|
|
27
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/full/report.html"><img src="docs/demo/card.png" width="420" alt="Classic card"></a><br>
|
|
28
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/full/report.html">Classic</a> (default)
|
|
29
|
-
</td>
|
|
30
|
-
<td width="50%" align="center">
|
|
31
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/signal/report.html"><img src="docs/demo/signal/card.png" width="420" alt="Signal card"></a><br>
|
|
32
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/signal/report.html">Signal</a>
|
|
33
|
-
</td>
|
|
34
|
-
</tr>
|
|
35
|
-
<tr>
|
|
36
|
-
<td width="50%" align="center">
|
|
37
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/afterhours/report.html"><img src="docs/demo/afterhours/card.png" width="420" alt="Afterhours card"></a><br>
|
|
38
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/afterhours/report.html">Afterhours</a>
|
|
39
|
-
</td>
|
|
40
|
-
<td width="50%" align="center">
|
|
41
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/studio/report.html"><img src="docs/demo/studio/card.png" width="420" alt="Studio card"></a><br>
|
|
42
|
-
<a href="https://erictsai83.github.io/prompt-profile/demo/studio/report.html">Studio</a>
|
|
43
|
-
</td>
|
|
44
|
-
</tr>
|
|
45
|
-
</table>
|
|
3
|
+
Turn your local Claude Code / Codex prompt history into an evidence-backed report of how you
|
|
4
|
+
collaborate with AI. Uses your logged-in `claude` or `codex` CLI: no API key needed.
|
|
5
|
+
|
|
6
|
+
**Analysis sends selected, redacted prompts to your CLI's model service and uses your
|
|
7
|
+
subscription quota.** Reports and analysis caches stay on your computer.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
[Full report](https://erictsai83.github.io/prompt-profile/sample-report.html)
|
|
12
|
+
· [Shareable report](https://erictsai83.github.io/prompt-profile/demo/without-personal/report.html)
|
|
13
|
+
· [Template gallery](https://erictsai83.github.io/prompt-profile/demo/templates/index.html)
|
|
14
|
+
|
|
15
|
+
All examples use fictional data.
|
|
46
16
|
|
|
47
17
|
## Quick start
|
|
48
18
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
19
|
+
You need Node.js ≥ 24 and either [Claude Code](https://claude.com/claude-code) or
|
|
20
|
+
[Codex](https://github.com/openai/codex) installed and logged in.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx prompt-profile@latest
|
|
24
|
+
```
|
|
53
25
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
26
|
+
The CLI shows the selected history and estimated calls, then asks for confirmation before
|
|
27
|
+
sending anything. By default it analyses the last two months and opens the finished report
|
|
28
|
+
in your browser. Files are saved under `./prompt-profile-report/`.
|
|
57
29
|
|
|
58
|
-
|
|
30
|
+
To inspect your history without calling an LLM (no login required):
|
|
59
31
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
`./prompt-profile-report/`.
|
|
32
|
+
```bash
|
|
33
|
+
npx prompt-profile@latest stats # local statistics only
|
|
34
|
+
npx prompt-profile@latest --dry-run # export the redacted chunks that would be sent
|
|
35
|
+
```
|
|
65
36
|
|
|
66
|
-
|
|
67
|
-
call
|
|
37
|
+
Dry-run exports contain your prompt text: keep them private and delete them when done.
|
|
38
|
+
The call estimate is not an upper bound; use `--max-calls` to cap CLI invocations, including
|
|
39
|
+
merges, evidence review and retries.
|
|
68
40
|
|
|
69
41
|
## Install
|
|
70
42
|
|
|
43
|
+
To install or update a global command:
|
|
44
|
+
|
|
71
45
|
```bash
|
|
72
|
-
|
|
73
|
-
npm i -g prompt-profile # or install the `prompt-profile` command
|
|
46
|
+
npm i -g prompt-profile@latest
|
|
74
47
|
prompt-profile --help
|
|
75
|
-
npm i -g prompt-profile@latest # update the installed command
|
|
76
48
|
```
|
|
77
49
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
50
|
+
Without Node.js, download a standalone executable for macOS, Linux or Windows from
|
|
51
|
+
[GitHub Releases](https://github.com/EricTsai83/prompt-profile/releases).
|
|
52
|
+
See the [standalone installation guide](https://github.com/EricTsai83/prompt-profile/blob/main/docs/user-guide.md#standalone-installation)
|
|
53
|
+
for extraction and macOS setup.
|
|
82
54
|
|
|
83
|
-
|
|
84
|
-
tar -xzf prompt-profile-<version>-darwin-arm64.tar.gz
|
|
85
|
-
./prompt-profile-<version>-darwin-arm64/prompt-profile
|
|
86
|
-
# macOS, if the archive was downloaded with a browser (the binary is not notarised):
|
|
87
|
-
xattr -d com.apple.quarantine ./prompt-profile-<version>-darwin-arm64/prompt-profile
|
|
88
|
-
```
|
|
55
|
+
## What you get
|
|
89
56
|
|
|
90
|
-
|
|
91
|
-
|
|
57
|
+
- **HTML report**: an offline portrait of your collaboration preferences, supported observations
|
|
58
|
+
and prompt suggestions, plus activity charts, workflow techniques and source evidence.
|
|
59
|
+
- **PNG share cards**: a 1200 × 630 card per language, without prompt quotes.
|
|
60
|
+
- **`profile.json`**: the data used to render the report again without another analysis.
|
|
61
|
+
- **Local history**: successful analyses are kept in a report library; open the output folder's
|
|
62
|
+
`index.html` to browse them.
|
|
92
63
|
|
|
93
|
-
|
|
64
|
+
Reports support English and Traditional Chinese; quotes stay in their original language.
|
|
65
|
+
The default is English, or both languages on a Chinese system locale. Each extra language
|
|
66
|
+
normally uses one translation call, with one retry for an incomplete or failed translation.
|
|
67
|
+
A Chinese-only request stops if translation still fails; it does not substitute an English report. To export a PDF, use your browser's Print → Save as PDF.
|
|
94
68
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
- **No API key needed**: the analysis runs your own logged-in `claude -p` or `codex exec` in the
|
|
99
|
-
background and **uses your subscription quota**. The base call estimate is shown
|
|
100
|
-
before confirmation. Intermediate merges and up to two retries per call can add calls;
|
|
101
|
-
use `--max-calls` to set a hard limit on CLI invocations, including retries.
|
|
69
|
+
Observations cite verified prompt quotes, but quote matching and model review do not prove an
|
|
70
|
+
interpretation is correct. Small histories may show “Early observations” instead of a role.
|
|
71
|
+
The [radar](docs/ability-scores.md) assesses six AI collaboration abilities from verified quotes in these conversations. Scores describe supported practice, not psychological traits or population ranks; “not assessed” is not a low score.
|
|
102
72
|
|
|
103
|
-
|
|
73
|
+
New analyses also retain [reusable instruction provenance](docs/instruction-provenance.md): what a skill is documented to do, who selected it for the task, and which historical requirements were supplied.
|
|
104
74
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
- `report.html`: your private, single-file report that works offline:
|
|
108
|
-
- who you are: archetype, a 24-hour clock of your busiest hours, four measured habits with
|
|
109
|
-
their definitions, your top traits with a quote each and how widely they are supported
|
|
110
|
-
- **how to improve your prompts**: 2–4 suggestions, each with a real prompt of yours and a
|
|
111
|
-
suggested rewrite, plus signals such as frequent corrections or very short follow-ups
|
|
112
|
-
- **how you work with AI**: a capability map (plan, delegate, extend, verify, ship) with the
|
|
113
|
-
skills you used and what each does, subagent types, MCP servers, models, pull requests,
|
|
114
|
-
parallel sessions and prompt-writing habits; counted from tool metadata and the skill
|
|
115
|
-
descriptions recorded in your transcripts, never tool inputs, outputs or skill arguments
|
|
116
|
-
- what changed since your last report, a daily calendar and a weekday × hour heatmap (hover
|
|
117
|
-
or tap for the count and main projects), project chapters, the five dimensions, and how it
|
|
118
|
-
was measured
|
|
119
|
-
- a language switch when there is more than one language
|
|
120
|
-
|
|
121
|
-
It shows everything by default, quotes and project folder names included. To share it, leave
|
|
122
|
-
parts out with `--exclude` (below).
|
|
123
|
-
|
|
124
|
-
- `card.png`: a 1200 × 630 share card in the default language, plus `card.<lang>.png` for each
|
|
125
|
-
other language (**omits evidence quotes**)
|
|
126
|
-
- `profile.json`: the raw profile data (re-create the report with `prompt-profile render`)
|
|
127
|
-
|
|
128
|
-
### Leaving parts out
|
|
129
|
-
|
|
130
|
-
`--exclude` (on the main command and on `render`) takes a comma list:
|
|
131
|
-
|
|
132
|
-
| Part | Left out |
|
|
133
|
-
| -------------- | ---------------------------------------------------------------------------------------------------- |
|
|
134
|
-
| `quotes` | Evidence quotes and the before / after rewrites |
|
|
135
|
-
| `projects` | Project names, shown as "Project A, B…", also inside the generated text and on the card |
|
|
136
|
-
| `dates` | Exact dates: no daily calendar, the data period by month |
|
|
137
|
-
| `coaching` | "Improve your prompts" and "since your last report" |
|
|
138
|
-
| `funfacts` | Fun facts |
|
|
139
|
-
| `custom-names` | Names and descriptions of your own skills, custom agent types and private MCP servers (only counted) |
|
|
140
|
-
| `personal` | All of the above |
|
|
75
|
+
## Usage
|
|
141
76
|
|
|
142
77
|
```bash
|
|
143
|
-
prompt-profile
|
|
144
|
-
|
|
78
|
+
prompt-profile --since 6m # 1m / 2m (default) / 3m / 6m / 1y / all
|
|
79
|
+
prompt-profile --engine codex # default: auto, Claude Code first
|
|
80
|
+
prompt-profile --model <name> # choose the analysis model
|
|
81
|
+
prompt-profile --max-calls 60 # cap CLI calls, including retries
|
|
82
|
+
prompt-profile --engine claude --max-cost-usd 1.50 # local stop threshold; may overshoot
|
|
83
|
+
prompt-profile --lang zh-TW,en # first language is the default
|
|
84
|
+
prompt-profile --voice first # I/我; second (you/你) is the default
|
|
85
|
+
prompt-profile --out <dir> # choose the output folder
|
|
86
|
+
|
|
87
|
+
prompt-profile render profile.json --look prism # change the look without LLM calls
|
|
88
|
+
prompt-profile cache clear # delete analysis cache entries
|
|
89
|
+
prompt-profile history --executions # list saved execution records (free)
|
|
145
90
|
```
|
|
146
91
|
|
|
147
|
-
|
|
92
|
+
Seven looks are available: classic (default), signal, afterhours, studio, prism, slate and folio.
|
|
93
|
+
Rendering a new look keeps the original report. Use `--card-hide stats` to hide the card's
|
|
94
|
+
measured summary, or `--avatar` to choose its illustration.
|
|
148
95
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
96
|
+
See the [user guide](https://github.com/EricTsai83/prompt-profile/blob/main/docs/user-guide.md)
|
|
97
|
+
for all documented options, language behavior, history and recovery. If a run stops, follow the
|
|
98
|
+
printed retry command: completed chunks and merges are cached; later steps may use quota again.
|
|
152
99
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
```
|
|
100
|
+
Each analysis saves calls, retries, cache reuse, token coverage and cost provenance, including
|
|
101
|
+
failed executions. The report shows generation usage separately from historical activity.
|
|
102
|
+
See [execution accounting](docs/execution-accounting.md) for recovery, unknown measurements
|
|
103
|
+
and cost-threshold limits.
|
|
158
104
|
|
|
159
|
-
|
|
160
|
-
| ------------- | ------------------------------------------------------------------------------------------------------- | ------------------------ | -------------- | ------------------------ |
|
|
161
|
-
| Secrets | private keys, API tokens, JWTs, bearer tokens, connection strings, `password=`… , random-looking tokens | masked | masked | nothing written (exit 1) |
|
|
162
|
-
| Personal data | email, home path, username, internal URL, phone, Taiwan ID, credit card | masked | kept, listed | nothing written (exit 1) |
|
|
105
|
+
## How much a run uses
|
|
163
106
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
107
|
+
A run reads everything locally, then analyses a **sample** of the selected history: about
|
|
108
|
+
20–26 chunks of redacted prompts (roughly 700k characters) once the history is larger than
|
|
109
|
+
that. Time, tokens and cost therefore stop growing with history size; `--full` analyses every
|
|
110
|
+
chunk and scales with the history instead. `--dry-run` prints your own estimate for free.
|
|
167
111
|
|
|
168
|
-
|
|
112
|
+
### Measured runs
|
|
113
|
+
|
|
114
|
+
One real history, default settings (last 2 months, sampled, report in Traditional Chinese
|
|
115
|
+
and English), measured on 2026-11-01 with both engines on the same input:
|
|
116
|
+
|
|
117
|
+
| Input | |
|
|
118
|
+
| ------------------ | --------------------------------------------------------------------- |
|
|
119
|
+
| History in range | 4,374 prompts in 613 conversations (Claude Code and Codex) |
|
|
120
|
+
| Analysed (sampled) | 1,499 prompts in 252 conversations: 21 of 68 chunks, ~665k characters |
|
|
121
|
+
|
|
122
|
+
| | Claude Code | Codex |
|
|
123
|
+
| ------------------------- | ---------------------------------- | ------------------------------ |
|
|
124
|
+
| Model | `claude-opus-5-5` (default effort) | `gpt-6.1-sol` (default effort) |
|
|
125
|
+
| CLI calls | 48 (no retries) | 48 (no retries) |
|
|
126
|
+
| Wall time | 25 min | 20.5 min |
|
|
127
|
+
| Tokens in / out | 1.46M / 0.38M | 1.73M / 0.29M |
|
|
128
|
+
| API list-price equivalent | **US$13.8** (reported by the CLI) | **≈ US$6.1** (estimated¹) |
|
|
129
|
+
|
|
130
|
+
¹ Codex does not report which model answered, so prompt-profile leaves its cost unpriced; the
|
|
131
|
+
estimate applies `gpt-6.1-sol` list prices to the measured tokens and leaves out cache writes,
|
|
132
|
+
which the Codex log does not report.
|
|
133
|
+
|
|
134
|
+
With a subscription these calls use your plan's quota; the dollar figures are what the same
|
|
135
|
+
tokens would cost on the API, not a bill. Another model, `--effort` level or history mix will
|
|
136
|
+
change them.
|
|
137
|
+
|
|
138
|
+
The measured costs above include 21 label calls that new runs no longer make. New costs have not yet been measured.
|
|
139
|
+
|
|
140
|
+
Historical breakdown (before ability scoring; the label stage below has now been removed):
|
|
141
|
+
|
|
142
|
+
| Stage | Calls | What it does | Share of cost (Claude / Codex) |
|
|
143
|
+
| -------------- | -------------------- | -------------------------------------------------------- | ------------------------------ |
|
|
144
|
+
| map | 1 per chunk | reads the redacted prompts and writes cited observations | 52% / 57% |
|
|
145
|
+
| merge | 0–3 | condenses observations when there are too many | 10% / 9% |
|
|
146
|
+
| draft + review | 2 | writes the profile, then checks it against the evidence | 13% / 10% |
|
|
147
|
+
| label | 1 per chunk | counts how often each trait shows (the trait radar) | 24% / 24% |
|
|
148
|
+
| translation | 1 per extra language | translates the generated text | 1% / 1% |
|
|
149
|
+
|
|
150
|
+
### Scale reference
|
|
151
|
+
|
|
152
|
+
Current base call estimates for the same history at different `--since` ranges (from `--dry-run`, so
|
|
153
|
+
merges and retries come on top):
|
|
154
|
+
|
|
155
|
+
| Range | Prompts after cleaning | Conversations | Chunks analysed / total | Base calls |
|
|
156
|
+
| ------------------ | ---------------------- | ------------- | ----------------------- | ---------- |
|
|
157
|
+
| 2 days | 392 | 29 | 10 / 10 (no sampling) | 13 |
|
|
158
|
+
| 1 week | 1,278 | 195 | 16 / 34 | 19 |
|
|
159
|
+
| 2 weeks | 1,690 | 241 | 18 / 40 | 21 |
|
|
160
|
+
| 1 month | 3,132 | 448 | 23 / 60 | 26 |
|
|
161
|
+
| 2 months (default) | 4,038 | 611 | 21 / 68 | 24 |
|
|
162
|
+
| 6 months | 7,605 | 1,629 | 26 / 111 | 29 |
|
|
163
|
+
| All (7 months) | 7,884 | 1,686 | 25 / 115 | 28 |
|
|
164
|
+
|
|
165
|
+
As a rule of thumb, a sampled run costs about one call per analysed chunk plus a handful, and
|
|
166
|
+
time and cost follow the number of analysed chunks: a history of a few hundred prompts takes
|
|
167
|
+
about half of the measured run above, and anything past ~1,300 prompts costs about the same.
|
|
168
|
+
`--full` on the 6-month history would analyse 111 chunks, about five times the measured run.
|
|
169
|
+
|
|
170
|
+
## Sharing and privacy
|
|
171
|
+
|
|
172
|
+
**Reports include quotes, project names and exact dates by default.** Cards omit quotes, but
|
|
173
|
+
can still include project names and usage. Create a version with personal sections left out:
|
|
169
174
|
|
|
170
175
|
```bash
|
|
171
|
-
prompt-profile
|
|
172
|
-
prompt-profile --since 3m # 1m / 3m / 6m / 1y / all (also <n>d, <n>w)
|
|
173
|
-
prompt-profile --engine codex # which CLI analyses your prompts (default: auto, Claude Code first)
|
|
174
|
-
prompt-profile --model <name> # model passed to claude / codex
|
|
175
|
-
prompt-profile --out <dir> # output folder
|
|
176
|
-
prompt-profile --max-calls 40 # cap CLI invocations, including merges and retries
|
|
177
|
-
prompt-profile --full # no sampling, analyse everything (slower, uses more quota)
|
|
178
|
-
prompt-profile --no-cache # do not read the analysis cache
|
|
179
|
-
prompt-profile --yes # skip the confirmation (required in non-interactive sessions)
|
|
180
|
-
prompt-profile --dry-run # write what would be sent to the LLM into --out, call nothing
|
|
181
|
-
prompt-profile --verbose # full errors and LLM call timings
|
|
182
|
-
prompt-profile --lang zh-TW,en # report languages, the first is the default (en, zh-TW)
|
|
183
|
-
prompt-profile --look signal # classic (default) / signal / afterhours / studio
|
|
184
|
-
prompt-profile --card-hide stats,graphic # leave traits / stats / graphic out of card.png
|
|
185
|
-
|
|
186
|
-
prompt-profile stats # statistics only, no LLM (free and fast)
|
|
187
|
-
prompt-profile render profile.json # re-create the report from an existing profile.json
|
|
188
|
-
prompt-profile cache clear # delete the analysis cache
|
|
189
|
-
|
|
190
|
-
prompt-profile render profile.json --look studio --card-hide stats
|
|
191
|
-
# a new look, written to variants/studio-no-stats/
|
|
176
|
+
prompt-profile render prompt-profile-report/profile.json --exclude personal
|
|
192
177
|
```
|
|
193
178
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
| Claude Code | `~/.claude/projects/*/*.jsonl`, `~/.claude/history.jsonl` (`CLAUDE_CONFIG_DIR`) |
|
|
213
|
-
| Codex | `~/.codex/sessions/**/rollout-*.jsonl`, `~/.codex/history.jsonl` (`CODEX_HOME`) |
|
|
214
|
-
|
|
215
|
-
**Prompt selection and preprocessing**: adapters select user prompts, excluding recognized system
|
|
216
|
-
messages, tool output and sub-agent conversations, then:
|
|
217
|
-
|
|
218
|
-
- pasted code / logs are collapsed into `[pasted code: N lines]`
|
|
219
|
-
- API keys, tokens, passwords, private keys, connection strings, emails, phone numbers, national
|
|
220
|
-
IDs, credit card numbers, internal URLs, UUIDs / hashes, home-folder paths and usernames that
|
|
221
|
-
match the supported rules are redacted **before** anything is sent (and before long
|
|
222
|
-
prompts are shortened); this is best-effort, not a guarantee that every secret is found
|
|
223
|
-
- projects are reduced to their folder name, never the full path
|
|
224
|
-
- `prompt-profile --dry-run` previews selected map chunks; generated observations, statistics
|
|
225
|
-
used by the final step, system instructions and retry messages are not a complete network dump
|
|
226
|
-
|
|
227
|
-
Selected, cleaned and redacted prompt text is sent **off your machine** through your logged-in
|
|
228
|
-
CLI to its model service, along with project basenames. Intermediate observations, supporting
|
|
229
|
-
quotes and usage statistics are sent during merge/final analysis. Text that does not match a
|
|
230
|
-
redaction rule can remain unchanged, including names and confidential prose.
|
|
231
|
-
|
|
232
|
-
Reports, `profile.json`, dry-run exports and analysis caches are written locally and are not
|
|
233
|
-
uploaded by prompt-profile. They can contain personal information. Created folders use `0700`
|
|
234
|
-
and files use `0600`; existing folder permissions are not changed. `cache clear` removes analysis
|
|
235
|
-
entries only, and reports deletion errors rather than claiming success. Delete reports and dry-run
|
|
236
|
-
exports separately when no longer needed.
|
|
237
|
-
|
|
238
|
-
Claude runs with safe mode, tools disabled, strict MCP configuration and disabled hooks. Codex
|
|
239
|
-
runs with `--ignore-user-config`, disabled hooks/notifications, a read-only sandbox and an ephemeral
|
|
240
|
-
session. Codex still uses your existing login, but user-configured providers and model defaults
|
|
241
|
-
are ignored; specify the model with `--model`. Both use fresh temporary working folders.
|
|
242
|
-
Administrator policy, environment settings and CLI/provider diagnostics can still apply. These
|
|
243
|
-
controls are tested on specific versions, and do not promise zero CLI/provider logs or traffic.
|
|
244
|
-
See [runner notes](src/llm/NOTES.md) and the [security policy](SECURITY.md).
|
|
245
|
-
|
|
246
|
-
prompt-profile has no telemetry. The report makes no network requests and its fonts ship with
|
|
247
|
-
the package. The one exception is the Chinese share card: on first use it downloads Noto Sans TC
|
|
248
|
-
(about 11 MB, from a pinned GitHub commit), checks its SHA-256 and caches it; no prompt data is
|
|
249
|
-
sent. The borrowed CLI manages its own network requests and provider data retention.
|
|
179
|
+
For a profile in the report library, use the current profile path printed by the CLI.
|
|
180
|
+
The full report is kept; review the exported files before sharing them. Individual exclusions
|
|
181
|
+
such as `quotes`, `projects` and `usage` are also available.
|
|
182
|
+
|
|
183
|
+
- Source histories are read only. Recognized system messages and tool output are excluded;
|
|
184
|
+
pasted code and logs are collapsed before analysis.
|
|
185
|
+
- Supported secrets and personal information are redacted before sending, and report text is
|
|
186
|
+
checked again before writing. These rules can miss confidential prose or unrecognized secrets.
|
|
187
|
+
- Selected prompts, project folder names, intermediate observations and prompt statistics go to
|
|
188
|
+
the model service through your CLI. Token usage, plans and API price estimates stay local;
|
|
189
|
+
price estimates are not your subscription bill.
|
|
190
|
+
- Reports, dry-run exports and caches are local files that can contain personal information.
|
|
191
|
+
Clearing the cache does not delete reports or dry-run exports.
|
|
192
|
+
- prompt-profile has no telemetry. Reports work offline. The Chinese PNG card downloads a
|
|
193
|
+
verified font on first use; the borrowed CLI manages its own network traffic and retention.
|
|
194
|
+
|
|
195
|
+
See [privacy details and output checks](https://github.com/EricTsai83/prompt-profile/blob/main/docs/user-guide.md#privacy)
|
|
196
|
+
for source paths, permissions, CLI isolation and redaction controls.
|
|
250
197
|
|
|
251
198
|
## FAQ
|
|
252
199
|
|
|
253
|
-
**
|
|
254
|
-
analysed, plus intermediate merges for large histories and one final call. Each call may retry
|
|
255
|
-
twice. The displayed count is a base estimate, not an upper bound; `--max-calls` limits total CLI
|
|
256
|
-
invocations rather than tokens, provider requests or money.
|
|
257
|
-
Chunks analysed before are read from the cache on the next run.
|
|
200
|
+
**Can I use an API key?** No; analysis uses your logged-in Claude Code or Codex CLI.
|
|
258
201
|
|
|
259
|
-
**
|
|
202
|
+
**Why are some prompts excluded?** Short acknowledgements, resent duplicates, recognized tool
|
|
203
|
+
notifications, repeated templates and command-only sessions are filtered. Each run shows counts.
|
|
260
204
|
|
|
261
|
-
**
|
|
262
|
-
|
|
263
|
-
multiple excerpts of one prompt do not count as independent support, and high-confidence traits
|
|
264
|
-
require support from multiple sessions. Quote matching does not prove the interpretation is correct.
|
|
265
|
-
Dimensions without verified quotes are marked as insufficiently supported.
|
|
205
|
+
**Can it analyse other languages?** Yes. Report text supports English and Traditional Chinese;
|
|
206
|
+
source prompts can be in any language.
|
|
266
207
|
|
|
267
|
-
|
|
268
|
-
notifications sent by the tools themselves, long templates repeated across sessions, and slash
|
|
269
|
-
commands of sessions that contain nothing else (scripts and tools) are excluded. Each run shows
|
|
270
|
-
how many were excluded.
|
|
208
|
+
## Development
|
|
271
209
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
Traditional Chinese (`--lang`, see [Usage](#usage)); quotes stay in their original language.
|
|
210
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for setup, checks and releases, and
|
|
211
|
+
[AGENTS.md](AGENTS.md) for architecture and repository rules.
|
|
275
212
|
|
|
276
|
-
|
|
213
|
+
## License
|
|
277
214
|
|
|
278
|
-
|
|
215
|
+
MIT. Not affiliated with or endorsed by Anthropic or OpenAI.
|
|
279
216
|
|
|
280
|
-
|
|
281
|
-
CI covers Linux (Node.js 22/24) and macOS (Node.js 24); Windows is unverified.
|
|
282
|
-
CLI behavior was checked with Claude Code 2.1.309 and codex-cli 0.164.0; upgrade the CLI if an
|
|
283
|
-
isolation flag is not recognized. `pnpm test:package` checks the installed npm tarball, including
|
|
284
|
-
bundled prompts, fonts, WASM rendering and file permissions.
|
|
217
|
+
### Narration voice
|
|
285
218
|
|
|
286
|
-
|
|
219
|
+
`--voice first|second` controls generated descriptive prose in every report language
|
|
220
|
+
and card. It is independent of `--look`. Second person (`you` / `你`) is the default; first
|
|
221
|
+
person uses `I` / `我`.
|
|
222
|
+
Quotes retain their original wording, and suggested sample prompts keep their intended speaker.
|
|
287
223
|
|
|
288
|
-
|
|
224
|
+
The selected voice is stored as `profile.voice` and shown in the report. First-person text is
|
|
225
|
+
an AI-authored draft; review it before presenting its claims as your own. Rerun the analysis
|
|
226
|
+
with another `--voice` to generate a coherent version; source-evidence map caches can be reused.
|
|
227
|
+
Changing voice does not add analysis stages or subscription calls beyond the normal run.
|
|
228
|
+
`render` preserves stored prose and voice without calling an LLM; it does not offer a voice
|
|
229
|
+
override or replace pronouns. Legacy profiles without voice metadata retain their original text
|
|
230
|
+
and do not receive an inferred voice label. Interface instructions still address the reader.
|